home *** CD-ROM | disk | FTP | other *** search
/ Kompuutteri K-CD 2002 #1 / K-CD_2002-01.iso / Delphi / INSTALL / program files / Borland / Delphi6 / Source / Rtl / Win / WinInet.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  2001-05-22  |  142.9 KB  |  3,046 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Borland Delphi Run-time Library                 }
  5. {       Win32 Internet API Interface Unit               }
  6. {                                                       }
  7. {       Copyright (c) 1985-1999, Microsoft Corporation  }
  8. {                                                       }
  9. {       Translator: Borland Software Corporation        }
  10. {                                                       }
  11. {*******************************************************}
  12.  
  13. unit WinInet;
  14.  
  15. {$WEAKPACKAGEUNIT}
  16.  
  17. interface
  18.  
  19. uses Windows;
  20.  
  21. { Contains manifests, functions, types and prototypes for 
  22.   Microsoft Windows Internet Extensions }
  23.  
  24.  
  25. { internet types }
  26.  
  27. {$HPPEMIT '#include <wininet.h>'}
  28.  
  29. type
  30.   HINTERNET = Pointer; 
  31.   {$EXTERNALSYM HINTERNET}
  32.   PHINTERNET = ^HINTERNET;
  33.   LPHINTERNET = PHINTERNET; 
  34.   {$EXTERNALSYM LPHINTERNET}
  35.  
  36.   INTERNET_PORT = Word; 
  37.   {$EXTERNALSYM INTERNET_PORT}
  38.   PINTERNET_PORT = ^INTERNET_PORT;
  39.   LPINTERNET_PORT = PINTERNET_PORT; 
  40.   {$EXTERNALSYM LPINTERNET_PORT}
  41.  
  42. { Internet APIs }
  43.  
  44. { manifests }
  45.  
  46. const
  47.   INTERNET_INVALID_PORT_NUMBER = 0;                 { use the protocol-specific default }
  48.   {$EXTERNALSYM INTERNET_INVALID_PORT_NUMBER}
  49.   INTERNET_DEFAULT_FTP_PORT = 21;                   { default for FTP servers }
  50.   {$EXTERNALSYM INTERNET_DEFAULT_FTP_PORT}
  51.   INTERNET_DEFAULT_GOPHER_PORT = 70;                {    "     "  gopher " }
  52.   {$EXTERNALSYM INTERNET_DEFAULT_GOPHER_PORT}
  53.   INTERNET_DEFAULT_HTTP_PORT = 80;                  {    "     "  HTTP   " }
  54.   {$EXTERNALSYM INTERNET_DEFAULT_HTTP_PORT}
  55.   INTERNET_DEFAULT_HTTPS_PORT = 443;                {    "     "  HTTPS  " }
  56.   {$EXTERNALSYM INTERNET_DEFAULT_HTTPS_PORT}
  57.   INTERNET_DEFAULT_SOCKS_PORT = 1080;               { default for SOCKS firewall servers.}
  58.   {$EXTERNALSYM INTERNET_DEFAULT_SOCKS_PORT}
  59.  
  60.   MAX_CACHE_ENTRY_INFO_SIZE = 4096;
  61.   {$EXTERNALSYM MAX_CACHE_ENTRY_INFO_SIZE}
  62.  
  63.  
  64. { maximum field lengths (arbitrary) }
  65.  
  66.   INTERNET_MAX_HOST_NAME_LENGTH = 256;
  67.   {$EXTERNALSYM INTERNET_MAX_HOST_NAME_LENGTH}
  68.   INTERNET_MAX_USER_NAME_LENGTH = 128;
  69.   {$EXTERNALSYM INTERNET_MAX_USER_NAME_LENGTH}
  70.   INTERNET_MAX_PASSWORD_LENGTH = 128;
  71.   {$EXTERNALSYM INTERNET_MAX_PASSWORD_LENGTH}
  72.   INTERNET_MAX_PORT_NUMBER_LENGTH = 5;              { INTERNET_PORT is unsigned short }
  73.   {$EXTERNALSYM INTERNET_MAX_PORT_NUMBER_LENGTH}
  74.   INTERNET_MAX_PORT_NUMBER_VALUE = 65535;           { maximum unsigned short value }
  75.   {$EXTERNALSYM INTERNET_MAX_PORT_NUMBER_VALUE}
  76.   INTERNET_MAX_PATH_LENGTH = 2048;
  77.   {$EXTERNALSYM INTERNET_MAX_PATH_LENGTH}
  78.   INTERNET_MAX_SCHEME_LENGTH = 32;                   { longest protocol name length }
  79.   {$EXTERNALSYM INTERNET_MAX_SCHEME_LENGTH}
  80.   INTERNET_MAX_PROTOCOL_NAME = 'gopher';            { longest protocol name }
  81.   {$EXTERNALSYM INTERNET_MAX_PROTOCOL_NAME}
  82.   INTERNET_MAX_URL_LENGTH = ((SizeOf(INTERNET_MAX_PROTOCOL_NAME) - 1)
  83.                             + SizeOf('://')
  84.                             + INTERNET_MAX_PATH_LENGTH);
  85.   {$EXTERNALSYM INTERNET_MAX_URL_LENGTH}
  86.  
  87. { values returned by InternetQueryOption with INTERNET_OPTION_KEEP_CONNECTION: }
  88.  
  89.   INTERNET_KEEP_ALIVE_UNKNOWN = -1;
  90.   {$EXTERNALSYM INTERNET_KEEP_ALIVE_UNKNOWN}
  91.   INTERNET_KEEP_ALIVE_ENABLED = 1;
  92.   {$EXTERNALSYM INTERNET_KEEP_ALIVE_ENABLED}
  93.   INTERNET_KEEP_ALIVE_DISABLED = 0;
  94.   {$EXTERNALSYM INTERNET_KEEP_ALIVE_DISABLED}
  95.  
  96. { flags returned by InternetQueryOption with INTERNET_OPTION_REQUEST_FLAGS }
  97.  
  98.   INTERNET_REQFLAG_FROM_CACHE   = $00000001;
  99.   {$EXTERNALSYM INTERNET_REQFLAG_FROM_CACHE}
  100.   INTERNET_REQFLAG_ASYNC        = $00000002;
  101.   {$EXTERNALSYM INTERNET_REQFLAG_ASYNC}
  102.   INTERNET_REQFLAG_VIA_PROXY    = $00000004;  { request was made via a proxy }
  103.   {$EXTERNALSYM INTERNET_REQFLAG_VIA_PROXY}
  104.   INTERNET_REQFLAG_NO_HEADERS   = $00000008;  { orginal response contained no headers }
  105.   {$EXTERNALSYM INTERNET_REQFLAG_NO_HEADERS}
  106.   INTERNET_REQFLAG_PASSIVE      = $00000010;  { FTP: passive-mode connection }
  107.   {$EXTERNALSYM INTERNET_REQFLAG_PASSIVE}
  108.   INTERNET_REQFLAG_CACHE_WRITE_DISABLED = $00000040;  { HTTPS: this request not cacheable }
  109.   {$EXTERNALSYM INTERNET_REQFLAG_CACHE_WRITE_DISABLED}
  110.  
  111. { flags common to open functions (not InternetOpen): }
  112.  
  113.   INTERNET_FLAG_RELOAD = $80000000;                 { retrieve the original item }
  114.   {$EXTERNALSYM INTERNET_FLAG_RELOAD}
  115.  
  116. { flags for InternetOpenUrl: }
  117.  
  118.   INTERNET_FLAG_RAW_DATA = $40000000;               { receive the item as raw data }
  119.   {$EXTERNALSYM INTERNET_FLAG_RAW_DATA}
  120.   INTERNET_FLAG_EXISTING_CONNECT = $20000000;       { do not create new connection object }
  121.   {$EXTERNALSYM INTERNET_FLAG_EXISTING_CONNECT}
  122.  
  123. { flags for InternetOpen: }
  124.  
  125.   INTERNET_FLAG_ASYNC = $10000000;                  { this request is asynchronous (where supported) }
  126.   {$EXTERNALSYM INTERNET_FLAG_ASYNC}
  127.  
  128. { protocol-specific flags: }
  129.  
  130.   INTERNET_FLAG_PASSIVE = $08000000;                { used for FTP connections }
  131.   {$EXTERNALSYM INTERNET_FLAG_PASSIVE}
  132.  
  133. { additional cache flags }
  134.  
  135.   INTERNET_FLAG_NO_CACHE_WRITE        = $04000000;  { don't write this item to the cache }
  136.   {$EXTERNALSYM INTERNET_FLAG_NO_CACHE_WRITE}
  137.   INTERNET_FLAG_DONT_CACHE            = INTERNET_FLAG_NO_CACHE_WRITE;
  138.   {$EXTERNALSYM INTERNET_FLAG_DONT_CACHE}
  139.   INTERNET_FLAG_MAKE_PERSISTENT       = $02000000;  { make this item persistent in cache }
  140.   {$EXTERNALSYM INTERNET_FLAG_MAKE_PERSISTENT}
  141.   INTERNET_FLAG_FROM_CACHE            = $01000000;  { use offline semantics }
  142.   {$EXTERNALSYM INTERNET_FLAG_FROM_CACHE}
  143.   INTERNET_FLAG_OFFLINE               = $01000000;  { use offline semantics }
  144.   {$EXTERNALSYM INTERNET_FLAG_OFFLINE}
  145.  
  146. { additional flags }
  147.  
  148.   INTERNET_FLAG_SECURE                = $00800000;  { use PCT/SSL if applicable (HTTP) }
  149.   {$EXTERNALSYM INTERNET_FLAG_SECURE}
  150.   INTERNET_FLAG_KEEP_CONNECTION       = $00400000;  { use keep-alive semantics }
  151.   {$EXTERNALSYM INTERNET_FLAG_KEEP_CONNECTION}
  152.   INTERNET_FLAG_NO_AUTO_REDIRECT      = $00200000;  { don't handle redirections automatically }
  153.   {$EXTERNALSYM INTERNET_FLAG_NO_AUTO_REDIRECT}
  154.   INTERNET_FLAG_READ_PREFETCH         = $00100000;  { do background read prefetch }
  155.   {$EXTERNALSYM INTERNET_FLAG_READ_PREFETCH}
  156.   INTERNET_FLAG_NO_COOKIES            = $00080000;  { no automatic cookie handling }
  157.   {$EXTERNALSYM INTERNET_FLAG_NO_COOKIES}
  158.   INTERNET_FLAG_NO_AUTH               = $00040000;  { no automatic authentication handling }
  159.   {$EXTERNALSYM INTERNET_FLAG_NO_AUTH}
  160.   INTERNET_FLAG_CACHE_IF_NET_FAIL     = $00010000;  { return cache file if net request fails }
  161.   {$EXTERNALSYM INTERNET_FLAG_CACHE_IF_NET_FAIL}
  162.  
  163. { Security Ignore Flags, Allow HttpOpenRequest to overide
  164.   Secure Channel (SSL/PCT) failures of the following types. }
  165.  
  166.   INTERNET_FLAG_IGNORE_CERT_CN_INVALID        = $00001000; { bad common name in X509 Cert. }
  167.   {$EXTERNALSYM INTERNET_FLAG_IGNORE_CERT_CN_INVALID}
  168.   INTERNET_FLAG_IGNORE_CERT_DATE_INVALID      = $00002000; { expired X509 Cert. }
  169.   {$EXTERNALSYM INTERNET_FLAG_IGNORE_CERT_DATE_INVALID}
  170.   INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS      = $00004000; { ex: http:// to https:// }
  171.   {$EXTERNALSYM INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS}
  172.   INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP       = $00008000; { ex: https:// to http:// }
  173.   {$EXTERNALSYM INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP}
  174.  
  175. //
  176. // more caching flags
  177. //
  178.  
  179.   INTERNET_FLAG_RESYNCHRONIZE     = $00000800;  // asking wininet to update an item if it is newer
  180.   {$EXTERNALSYM INTERNET_FLAG_RESYNCHRONIZE}
  181.   INTERNET_FLAG_HYPERLINK         = $00000400;  // asking wininet to do hyperlinking semantic which works right for scripts
  182.   {$EXTERNALSYM INTERNET_FLAG_HYPERLINK}
  183.   INTERNET_FLAG_NO_UI             = $00000200;  // no cookie popup
  184.   {$EXTERNALSYM INTERNET_FLAG_NO_UI}
  185.   INTERNET_FLAG_PRAGMA_NOCACHE    = $00000100;  // asking wininet to add "pragma: no-cache"
  186.   {$EXTERNALSYM INTERNET_FLAG_PRAGMA_NOCACHE}
  187.   INTERNET_FLAG_CACHE_ASYNC       = $00000080;  // ok to perform lazy cache-write
  188.   {$EXTERNALSYM INTERNET_FLAG_CACHE_ASYNC}
  189.   INTERNET_FLAG_FORMS_SUBMIT      = $00000040;  // this is a forms submit
  190.   {$EXTERNALSYM INTERNET_FLAG_FORMS_SUBMIT}
  191.   INTERNET_FLAG_NEED_FILE         = $00000010;  // need a file for this request
  192.   {$EXTERNALSYM INTERNET_FLAG_NEED_FILE}
  193.   INTERNET_FLAG_MUST_CACHE_REQUEST = INTERNET_FLAG_NEED_FILE;
  194.   {$EXTERNALSYM INTERNET_FLAG_MUST_CACHE_REQUEST}  
  195.  
  196. { FTP }
  197.  
  198. { manifests }
  199. const
  200. { flags for FTP }
  201.   FTP_TRANSFER_TYPE_UNKNOWN   = $00000000;
  202.   {$EXTERNALSYM FTP_TRANSFER_TYPE_UNKNOWN}
  203.   FTP_TRANSFER_TYPE_ASCII     = $00000001;
  204.   {$EXTERNALSYM FTP_TRANSFER_TYPE_ASCII}
  205.   FTP_TRANSFER_TYPE_BINARY    = $00000002;
  206.   {$EXTERNALSYM FTP_TRANSFER_TYPE_BINARY}
  207.  
  208.   FTP_TRANSFER_TYPE_MASK      = FTP_TRANSFER_TYPE_ASCII or
  209.                                 FTP_TRANSFER_TYPE_BINARY;
  210.   {$EXTERNALSYM FTP_TRANSFER_TYPE_MASK}
  211.  
  212.   INTERNET_FLAG_TRANSFER_ASCII        = FTP_TRANSFER_TYPE_ASCII;
  213.   {$EXTERNALSYM INTERNET_FLAG_TRANSFER_ASCII}
  214.   INTERNET_FLAG_TRANSFER_BINARY       = FTP_TRANSFER_TYPE_BINARY;
  215.   {$EXTERNALSYM INTERNET_FLAG_TRANSFER_BINARY}
  216.  
  217. { flags field masks }
  218.  
  219.   SECURITY_INTERNET_MASK      = INTERNET_FLAG_IGNORE_CERT_CN_INVALID or
  220.                                 INTERNET_FLAG_IGNORE_CERT_DATE_INVALID or
  221.                                 INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS or
  222.                                 INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP;
  223.   {$EXTERNALSYM SECURITY_INTERNET_MASK}
  224.  
  225.   SECURITY_SET_MASK           = SECURITY_INTERNET_MASK;
  226.   {$EXTERNALSYM SECURITY_SET_MASK}
  227.  
  228.   INTERNET_FLAGS_MASK         = INTERNET_FLAG_RELOAD              or
  229.                                 INTERNET_FLAG_RAW_DATA            or
  230.                                 INTERNET_FLAG_EXISTING_CONNECT    or
  231.                                 INTERNET_FLAG_ASYNC               or
  232.                                 INTERNET_FLAG_PASSIVE             or
  233.                                 INTERNET_FLAG_NO_CACHE_WRITE      or
  234.                                 INTERNET_FLAG_MAKE_PERSISTENT     or
  235.                                 INTERNET_FLAG_FROM_CACHE          or
  236.                                 INTERNET_FLAG_SECURE              or
  237.                                 INTERNET_FLAG_KEEP_CONNECTION     or
  238.                                 INTERNET_FLAG_NO_AUTO_REDIRECT    or
  239.                                 INTERNET_FLAG_READ_PREFETCH       or
  240.                                 INTERNET_FLAG_NO_COOKIES          or
  241.                                 INTERNET_FLAG_NO_AUTH             or
  242.                                 INTERNET_FLAG_CACHE_IF_NET_FAIL   or
  243.                                 SECURITY_INTERNET_MASK            or
  244.                                 INTERNET_FLAG_RESYNCHRONIZE       or
  245.                                 INTERNET_FLAG_HYPERLINK           or
  246.                                 INTERNET_FLAG_NO_UI               or
  247.                                 INTERNET_FLAG_PRAGMA_NOCACHE      or
  248.                                 INTERNET_FLAG_CACHE_ASYNC         or
  249.                                 INTERNET_FLAG_FORMS_SUBMIT        or
  250.                                 INTERNET_FLAG_NEED_FILE           or
  251.                                 INTERNET_FLAG_TRANSFER_BINARY     or
  252.                                 INTERNET_FLAG_TRANSFER_ASCII;
  253.   {$EXTERNALSYM INTERNET_FLAGS_MASK}
  254.  
  255.   INTERNET_ERROR_MASK_INSERT_CDROM = $1;
  256.   {$EXTERNALSYM INTERNET_ERROR_MASK_INSERT_CDROM}
  257.  
  258.   INTERNET_OPTIONS_MASK       =  not INTERNET_FLAGS_MASK;
  259.   {$EXTERNALSYM INTERNET_OPTIONS_MASK}
  260.  
  261. //
  262. // common per-API flags (new APIs)
  263. //
  264.  
  265.   WININET_API_FLAG_ASYNC          = $00000001;  // force async operation
  266.   {$EXTERNALSYM WININET_API_FLAG_ASYNC}
  267.   WININET_API_FLAG_SYNC           = $00000004;  // force sync operation
  268.   {$EXTERNALSYM WININET_API_FLAG_SYNC}
  269.   WININET_API_FLAG_USE_CONTEXT    = $00000008;  // use value supplied in dwContext (even if 0)
  270.   {$EXTERNALSYM WININET_API_FLAG_USE_CONTEXT}
  271.  
  272. { INTERNET_NO_CALLBACK - if this value is presented as the dwContext parameter }
  273. { then no call-backs will be made for that API }
  274.  
  275.   INTERNET_NO_CALLBACK = 0;
  276.   {$EXTERNALSYM INTERNET_NO_CALLBACK}
  277.  
  278. { structures/types }
  279.  
  280. type
  281.   PInternetScheme = ^TInternetScheme;
  282.   TInternetScheme = Integer;
  283. const
  284.   INTERNET_SCHEME_PARTIAL = -2;
  285.   {$EXTERNALSYM INTERNET_SCHEME_PARTIAL}
  286.   INTERNET_SCHEME_UNKNOWN = -1;
  287.   {$EXTERNALSYM INTERNET_SCHEME_UNKNOWN}
  288.   INTERNET_SCHEME_DEFAULT = 0;
  289.   {$EXTERNALSYM INTERNET_SCHEME_DEFAULT}
  290.   INTERNET_SCHEME_FTP = 1;
  291.   {$EXTERNALSYM INTERNET_SCHEME_FTP}
  292.   INTERNET_SCHEME_GOPHER = 2;
  293.   {$EXTERNALSYM INTERNET_SCHEME_GOPHER}
  294.   INTERNET_SCHEME_HTTP = 3;
  295.   {$EXTERNALSYM INTERNET_SCHEME_HTTP}
  296.   INTERNET_SCHEME_HTTPS = 4;
  297.   {$EXTERNALSYM INTERNET_SCHEME_HTTPS}
  298.   INTERNET_SCHEME_FILE = 5;
  299.   {$EXTERNALSYM INTERNET_SCHEME_FILE}
  300.   INTERNET_SCHEME_NEWS = 6;
  301.   {$EXTERNALSYM INTERNET_SCHEME_NEWS}
  302.   INTERNET_SCHEME_MAILTO = 7;
  303.   {$EXTERNALSYM INTERNET_SCHEME_MAILTO}
  304.   INTERNET_SCHEME_FIRST = INTERNET_SCHEME_FTP;
  305.   {$EXTERNALSYM INTERNET_SCHEME_FIRST}
  306.   INTERNET_SCHEME_LAST = INTERNET_SCHEME_MAILTO;
  307.   {$EXTERNALSYM INTERNET_SCHEME_LAST}
  308.  
  309. { TInternetAsyncResult - this structure is returned to the application via }
  310. { the callback with INTERNET_STATUS_REQUEST_COMPLETE. It is not sufficient to }
  311. { just return the result of the async operation. If the API failed then the }
  312. { app cannot call GetLastError because the thread context will be incorrect. }
  313. { Both the value returned by the async API and any resultant error code are }
  314. { made available. The app need not check dwError if dwResult indicates that }
  315. { the API succeeded (in this case dwError will be ERROR_SUCCESS) }
  316.  
  317. type
  318.   PInternetAsyncResult = ^TInternetAsyncResult;
  319.   TInternetAsyncResult = packed record
  320.     dwResult: DWORD; { the HINTERNET, DWORD or BOOL return code from an async API }
  321.     dwError: DWORD; { dwError - the error code if the API failed }
  322.   end;
  323.  
  324.   PInternetPrefetchStatus = ^TInternetPrefetchStatus;
  325.   TInternetPrefetchStatus = packed record
  326.     dwStatus: DWORD;  { dwStatus - status of download. See INTERNET_PREFETCH_ flags }
  327.     dwSize: DWORD;    { dwSize - size of file downloaded so far }
  328.   end;
  329.  
  330. const
  331. { INTERNET_PREFETCH_STATUS - dwStatus values }
  332.   INTERNET_PREFETCH_PROGRESS      = 0;
  333.   {$EXTERNALSYM INTERNET_PREFETCH_PROGRESS}
  334.   INTERNET_PREFETCH_COMPLETE      = 1;
  335.   {$EXTERNALSYM INTERNET_PREFETCH_COMPLETE}
  336.   INTERNET_PREFETCH_ABORTED       = 2;
  337.   {$EXTERNALSYM INTERNET_PREFETCH_ABORTED}
  338.  
  339. type
  340. { TInternetProxyInfo - structure supplied with INTERNET_OPTION_PROXY to get/ }
  341. { set proxy information on a InternetOpen handle }
  342.   PInternetProxyInfo = ^INTERNET_PROXY_INFO;
  343.   INTERNET_PROXY_INFO = record
  344.     dwAccessType: DWORD;       { dwAccessType - INTERNET_OPEN_TYPE_DIRECT, INTERNET_OPEN_TYPE_PROXY, or }
  345.     lpszProxy: LPCSTR;        { lpszProxy - proxy server list }
  346.     lpszProxyBypass: LPCSTR;  { lpszProxyBypass - proxy bypass list }
  347.   end;
  348.   {$EXTERNALSYM INTERNET_PROXY_INFO}
  349.   TInternetProxyInfo = INTERNET_PROXY_INFO;
  350.   LPINTERNET_PROXY_INFO = PInternetProxyInfo;
  351.   {$EXTERNALSYM LPINTERNET_PROXY_INFO}
  352.  
  353. { INTERNET_VERSION_INFO - version information returned via }
  354. { InternetQueryOption(..., INTERNET_OPTION_VERSION, ...) }
  355.  
  356.   PInternetVersionInfo = ^INTERNET_VERSION_INFO;
  357.   INTERNET_VERSION_INFO = record
  358.     dwMajorVersion: DWORD;
  359.     dwMinorVersion: DWORD;
  360.   end;
  361.   {$EXTERNALSYM INTERNET_VERSION_INFO}
  362.   TInternetVersionInfo = INTERNET_VERSION_INFO;
  363.   LPINTERNET_VERSION_INFO = PInternetVersionInfo;
  364.   {$EXTERNALSYM LPINTERNET_VERSION_INFO}
  365.  
  366. { HTTP_VERSION_INFO - query or set global HTTP version (1.0 or 1.1) }
  367.   PHttpVersionInfo = ^HTTP_VERSION_INFO;
  368.   HTTP_VERSION_INFO = record
  369.     dwMajorVersion: DWORD;
  370.     dwMinorVersion: DWORD;
  371.   end;
  372.   {$EXTERNALSYM HTTP_VERSION_INFO}
  373.   THttpVersionInfo = HTTP_VERSION_INFO;
  374.   LPHTTP_VERSION_INFO = PHttpVersionInfo;
  375.   {$EXTERNALSYM LPHTTP_VERSION_INFO}
  376.  
  377. { INTERNET_CONNECTED_INFO - information used to set the global connected state }
  378.  
  379.   PInternetConnectedInfo = ^INTERNET_CONNECTED_INFO;
  380.   INTERNET_CONNECTED_INFO = record
  381.       dwConnectedState: DWORD;     {dwConnectedState - new connected/disconnected state.}
  382.       dwFlags: DWORD;              {dwFlags - flags controlling connected->disconnected (or disconnected-> }
  383.                                    {connected) transition. See below}
  384.   end;
  385.   {$EXTERNALSYM INTERNET_CONNECTED_INFO}
  386.   TInternetConnectedInfo = INTERNET_CONNECTED_INFO;
  387.   LPINTERNET_CONNECTED_INFO = PInternetConnectedInfo;
  388.   {$EXTERNALSYM LPINTERNET_CONNECTED_INFO}
  389.  
  390. { flags for INTERNET_CONNECTED_INFO dwFlags }
  391.  
  392. { ISO_FORCE_DISCONNECTED - if set when putting Wininet into disconnected mode, }
  393. { all outstanding requests will be aborted with a cancelled error }
  394.  
  395. const
  396.   ISO_FORCE_DISCONNECTED  = $00000001;
  397.   {$EXTERNALSYM ISO_FORCE_DISCONNECTED}
  398.  
  399. { URL_COMPONENTS - the constituent parts of an URL. Used in InternetCrackUrl }
  400. { and InternetCreateUrl }
  401.  
  402. { For InternetCrackUrl, if a pointer field and its corresponding length field }
  403. { are both 0 then that component is not returned; If the pointer field is NULL }
  404. { but the length field is not zero, then both the pointer and length fields are }
  405. { returned; if both pointer and corresponding length fields are non-zero then }
  406. { the pointer field points to a buffer where the component is copied. The }
  407. { component may be un-escaped, depending on dwFlags }
  408.  
  409. { For InternetCreateUrl, the pointer fields should be nil if the component }
  410. { is not required. If the corresponding length field is zero then the pointer }
  411. { field is the address of a zero-terminated string. If the length field is not }
  412. { zero then it is the string length of the corresponding pointer field }
  413.  
  414. type
  415.   PURLComponents = ^URL_COMPONENTS;
  416.   URL_COMPONENTS = record
  417.     dwStructSize: DWORD;        { size of this structure. Used in version check }
  418.     lpszScheme: LPSTR;         { pointer to scheme name }
  419.     dwSchemeLength: DWORD;      { length of scheme name }
  420.     nScheme: TInternetScheme;    { enumerated scheme type (if known) }
  421.     lpszHostName: LPSTR;       { pointer to host name }
  422.     dwHostNameLength: DWORD;    { length of host name }
  423.     nPort: INTERNET_PORT;       { converted port number }
  424.     pad: WORD;                  { force correct allignment regardless of comp. flags}
  425.     lpszUserName: LPSTR;       { pointer to user name }
  426.     dwUserNameLength: DWORD;    { length of user name }
  427.     lpszPassword: LPSTR;       { pointer to password }
  428.     dwPasswordLength: DWORD;    { length of password }
  429.     lpszUrlPath: LPSTR;        { pointer to URL-path }
  430.     dwUrlPathLength: DWORD;     { length of URL-path }
  431.     lpszExtraInfo: LPSTR;      { pointer to extra information (e.g. ?foo or #foo) }
  432.     dwExtraInfoLength: DWORD;   { length of extra information }
  433.   end;
  434.   {$EXTERNALSYM URL_COMPONENTS}
  435.   TURLComponents = URL_COMPONENTS;
  436.   LPURL_COMPONENTS = PURLComponents;
  437.   {$EXTERNALSYM LPURL_COMPONENTS}
  438.   
  439. { TInternetCertificateInfo lpBuffer - contains the certificate returned from
  440.   the server }
  441.  
  442.   PInternetCertificateInfo = ^INTERNET_CERTIFICATE_INFO;
  443.   INTERNET_CERTIFICATE_INFO = record
  444.     ftExpiry: TFileTime;             { ftExpiry - date the certificate expires. }
  445.     ftStart: TFileTime;              { ftStart - date the certificate becomes valid. }
  446.     lpszSubjectInfo: LPSTR;        { lpszSubjectInfo - the name of organization, site, and server }
  447.                                     {   the cert. was issued for. }
  448.     lpszIssuerInfo: LPSTR;         { lpszIssuerInfo - the name of orgainzation, site, and server }
  449.                                     {   the cert was issues by. }
  450.     lpszProtocolName: LPSTR;       { lpszProtocolName - the name of the protocol used to provide the secure }
  451.                                     {   connection. }
  452.     lpszSignatureAlgName: LPSTR;   { lpszSignatureAlgName - the name of the algorithm used for signing }
  453.                                     {  the certificate. }
  454.     lpszEncryptionAlgName: LPSTR;  { lpszEncryptionAlgName - the name of the algorithm used for }
  455.                                     {  doing encryption over the secure channel (SSL/PCT) connection. }
  456.     dwKeySize: DWORD;               { dwKeySize - size of the key. }
  457.   end;
  458.   {$EXTERNALSYM INTERNET_CERTIFICATE_INFO}
  459.   TInternetCertificateInfo = INTERNET_CERTIFICATE_INFO;
  460.   LPINTERNET_CERTIFICATE_INFO = pInternetCertificateInfo;
  461.   {$EXTERNALSYM LPINTERNET_CERTIFICATE_INFO}
  462.  
  463. { INTERNET_BUFFERS - combines headers and data. May be chained for e.g. file }
  464. { upload or scatter/gather operations. For chunked read/write, lpcszHeader }
  465. { contains the chunked-ext }
  466.   PInternetBuffersA = ^INTERNET_BUFFERSA;
  467.   PInternetBuffersW = ^INTERNET_BUFFERSW;
  468.   PInternetBuffers = PInternetBuffersA;
  469.   INTERNET_BUFFERSA = record
  470.     dwStructSize: DWORD;      { used for API versioning. Set to sizeof(INTERNET_BUFFERS) }
  471.     Next: PInternetBuffers;   { chain of buffers }
  472.     lpcszHeader: PAnsiChar;       { pointer to headers (may be NULL) }
  473.     dwHeadersLength: DWORD;   { length of headers if not NULL }
  474.     dwHeadersTotal: DWORD;    { size of headers if not enough buffer }
  475.     lpvBuffer: Pointer;       { pointer to data buffer (may be NULL) }
  476.     dwBufferLength: DWORD;    { length of data buffer if not NULL }
  477.     dwBufferTotal: DWORD;     { total size of chunk, or content-length if not chunked }
  478.     dwOffsetLow: DWORD;       { used for read-ranges (only used in HttpSendRequest2) }
  479.     dwOffsetHigh: DWORD;
  480.   end;
  481.   {$EXTERNALSYM INTERNET_BUFFERSA}
  482.   TInternetBuffersA = INTERNET_BUFFERSA;
  483.   LPINTERNET_BUFFERSA = PInternetBuffersA;
  484.   {$EXTERNALSYM LPINTERNET_BUFFERSA}
  485.   INTERNET_BUFFERSW = record
  486.     dwStructSize: DWORD;      { used for API versioning. Set to sizeof(INTERNET_BUFFERS) }
  487.     Next: PInternetBuffers;   { chain of buffers }
  488.     lpcszHeader: PAnsiChar;       { pointer to headers (may be NULL) }
  489.     dwHeadersLength: DWORD;   { length of headers if not NULL }
  490.     dwHeadersTotal: DWORD;    { size of headers if not enough buffer }
  491.     lpvBuffer: Pointer;       { pointer to data buffer (may be NULL) }
  492.     dwBufferLength: DWORD;    { length of data buffer if not NULL }
  493.     dwBufferTotal: DWORD;     { total size of chunk, or content-length if not chunked }
  494.     dwOffsetLow: DWORD;       { used for read-ranges (only used in HttpSendRequest2) }
  495.     dwOffsetHigh: DWORD;
  496.   end;
  497.   {$EXTERNALSYM INTERNET_BUFFERSW}
  498.   TInternetBuffersW = INTERNET_BUFFERSW;
  499.   LPINTERNET_BUFFERSW = PInternetBuffersW;
  500.   {$EXTERNALSYM LPINTERNET_BUFFERSW}
  501.   INTERNET_BUFFERS = INTERNET_BUFFERSA;
  502.   
  503. { prototypes }
  504.  
  505. function InternetTimeFromSystemTime(const pst: TSystemTime;
  506.   dwRFC: DWORD; lpszTime: LPSTR; cbTime: DWORD): BOOL; stdcall;
  507.   {$EXTERNALSYM InternetTimeFromSystemTime}
  508.  
  509. const
  510. { constants for InternetTimeFromSystemTime }
  511.   INTERNET_RFC1123_FORMAT         = 0;
  512.   {$EXTERNALSYM INTERNET_RFC1123_FORMAT}
  513.   INTERNET_RFC1123_BUFSIZE        = 30;
  514.   {$EXTERNALSYM INTERNET_RFC1123_BUFSIZE}
  515.  
  516. function InternetCrackUrl(lpszUrl: PChar; dwUrlLength, dwFlags: DWORD;
  517.   var lpUrlComponents: TURLComponents): BOOL; stdcall;
  518.   {$EXTERNALSYM InternetCrackUrl}
  519. function InternetCrackUrlA(lpszUrl: PAnsiChar; dwUrlLength, dwFlags: DWORD;
  520.   var lpUrlComponents: TURLComponents): BOOL; stdcall;
  521.   {$EXTERNALSYM InternetCrackUrlA}
  522. function InternetCrackUrlW(lpszUrl: PWideChar; dwUrlLength, dwFlags: DWORD;
  523.   var lpUrlComponents: TURLComponents): BOOL; stdcall;
  524.   {$EXTERNALSYM InternetCrackUrlW}
  525.  
  526. function InternetCreateUrl(var lpUrlComponents: TURLComponents;
  527.   dwFlags: DWORD; lpszUrl: PChar; var dwUrlLength: DWORD): BOOL; stdcall;
  528.   {$EXTERNALSYM InternetCreateUrl}
  529. function InternetCreateUrlA(var lpUrlComponents: TURLComponents;
  530.   dwFlags: DWORD; lpszUrl: PAnsiChar; var dwUrlLength: DWORD): BOOL; stdcall;
  531.   {$EXTERNALSYM InternetCreateUrlA}
  532. function InternetCreateUrlW(var lpUrlComponents: TURLComponents;
  533.   dwFlags: DWORD; lpszUrl: PWideChar; var dwUrlLength: DWORD): BOOL; stdcall;
  534.   {$EXTERNALSYM InternetCreateUrlW}
  535.  
  536. function InternetCanonicalizeUrl(lpszUrl: PChar;
  537.   lpszBuffer: PChar; var lpdwBufferLength: DWORD;
  538.   dwFlags: DWORD): BOOL; stdcall;
  539.   {$EXTERNALSYM InternetCanonicalizeUrl}
  540. function InternetCanonicalizeUrlA(lpszUrl: PAnsiChar;
  541.   lpszBuffer: PAnsiChar; var lpdwBufferLength: DWORD;
  542.   dwFlags: DWORD): BOOL; stdcall;
  543.   {$EXTERNALSYM InternetCanonicalizeUrlA}
  544. function InternetCanonicalizeUrlW(lpszUrl: PWideChar;
  545.   lpszBuffer: PWideChar; var lpdwBufferLength: DWORD;
  546.   dwFlags: DWORD): BOOL; stdcall;
  547.   {$EXTERNALSYM InternetCanonicalizeUrlW}
  548.  
  549. function InternetCombineUrl(lpszBaseUrl, lpszRelativeUrl: PChar;
  550.   lpszBuffer: PChar; var lpdwBufferLength: DWORD;
  551.   dwFlags: DWORD): BOOL; stdcall;
  552.   {$EXTERNALSYM InternetCombineUrl}
  553. function InternetCombineUrlA(lpszBaseUrl, lpszRelativeUrl: PAnsiChar;
  554.   lpszBuffer: PAnsiChar; var lpdwBufferLength: DWORD;
  555.   dwFlags: DWORD): BOOL; stdcall;
  556.   {$EXTERNALSYM InternetCombineUrlA}
  557. function InternetCombineUrlW(lpszBaseUrl, lpszRelativeUrl: PWideChar;
  558.   lpszBuffer: PWideChar; var lpdwBufferLength: DWORD;
  559.   dwFlags: DWORD): BOOL; stdcall;
  560.   {$EXTERNALSYM InternetCombineUrlW}
  561.  
  562. const
  563. { flags for InternetCrackUrl and InternetCreateUrl }
  564.  
  565.   ICU_ESCAPE          = $80000000;  { (un)escape URL characters }
  566.   {$EXTERNALSYM ICU_ESCAPE}
  567.   ICU_USERNAME        = $40000000;  { use internal username & password }
  568.   {$EXTERNALSYM ICU_USERNAME}
  569.  
  570. { flags for InternetCanonicalizeUrl and InternetCombineUrl }
  571.  
  572.   ICU_NO_ENCODE       = $20000000;  { Don't convert unsafe characters to escape sequence }
  573.   {$EXTERNALSYM ICU_NO_ENCODE}
  574.   ICU_DECODE          = $10000000;  { Convert escape sequences to characters }
  575.   {$EXTERNALSYM ICU_DECODE}
  576.   ICU_NO_META         = $08000000;  { Don't convert .. etc. meta path sequences }
  577.   {$EXTERNALSYM ICU_NO_META}
  578.   ICU_ENCODE_SPACES_ONLY     = $04000000;  { Encode spaces only }
  579.   {$EXTERNALSYM ICU_ENCODE_SPACES_ONLY}
  580.   ICU_BROWSER_MODE    = $02000000;  { Special encode/decode rules for browser }
  581.   {$EXTERNALSYM ICU_BROWSER_MODE}
  582.  
  583. function InternetOpen(lpszAgent: PChar; dwAccessType: DWORD; 
  584.   lpszProxy, lpszProxyBypass: PChar; dwFlags: DWORD): HINTERNET; stdcall;
  585.   {$EXTERNALSYM InternetOpen}
  586. function InternetOpenA(lpszAgent: PAnsiChar; dwAccessType: DWORD; 
  587.   lpszProxy, lpszProxyBypass: PAnsiChar; dwFlags: DWORD): HINTERNET; stdcall;
  588.   {$EXTERNALSYM InternetOpenA}
  589. function InternetOpenW(lpszAgent: PWideChar; dwAccessType: DWORD; 
  590.   lpszProxy, lpszProxyBypass: PWideChar; dwFlags: DWORD): HINTERNET; stdcall;
  591.   {$EXTERNALSYM InternetOpenW}
  592.  
  593. { access types for InternetOpen }
  594. const
  595.   INTERNET_OPEN_TYPE_PRECONFIG        = 0;  { use registry configuration }
  596.   {$EXTERNALSYM INTERNET_OPEN_TYPE_PRECONFIG}
  597.   INTERNET_OPEN_TYPE_DIRECT           = 1;  { direct to net }
  598.   {$EXTERNALSYM INTERNET_OPEN_TYPE_DIRECT}
  599.   INTERNET_OPEN_TYPE_PROXY            = 3;  { via named proxy }
  600.   {$EXTERNALSYM INTERNET_OPEN_TYPE_PROXY}
  601.   INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY  = 4;   { prevent using java/script/INS }
  602.   {$EXTERNALSYM INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY}
  603.  
  604. { old names for access types }
  605.  
  606.   PRE_CONFIG_INTERNET_ACCESS      = INTERNET_OPEN_TYPE_PRECONFIG;
  607.   {$EXTERNALSYM PRE_CONFIG_INTERNET_ACCESS}
  608.   LOCAL_INTERNET_ACCESS           = INTERNET_OPEN_TYPE_DIRECT;
  609.   {$EXTERNALSYM LOCAL_INTERNET_ACCESS}
  610.   GATEWAY_INTERNET_ACCESS         = 2;  { Internet via gateway }
  611.   {$EXTERNALSYM GATEWAY_INTERNET_ACCESS}
  612.   CERN_PROXY_INTERNET_ACCESS      = INTERNET_OPEN_TYPE_PROXY;
  613.   {$EXTERNALSYM CERN_PROXY_INTERNET_ACCESS}
  614.  
  615. function InternetCloseHandle(hInet: HINTERNET): BOOL; stdcall;
  616.   {$EXTERNALSYM InternetCloseHandle}
  617.  
  618. function InternetConnect(hInet: HINTERNET; lpszServerName: PChar;
  619.   nServerPort: INTERNET_PORT; lpszUsername: PChar; lpszPassword: PChar;
  620.   dwService: DWORD; dwFlags: DWORD; dwContext: DWORD): HINTERNET; stdcall;
  621.   {$EXTERNALSYM InternetConnect}
  622. function InternetConnectA(hInet: HINTERNET; lpszServerName: PAnsiChar;
  623.   nServerPort: INTERNET_PORT; lpszUsername: PAnsiChar; lpszPassword: PAnsiChar;
  624.   dwService: DWORD; dwFlags: DWORD; dwContext: DWORD): HINTERNET; stdcall;
  625.   {$EXTERNALSYM InternetConnectA}
  626. function InternetConnectW(hInet: HINTERNET; lpszServerName: PWideChar;
  627.   nServerPort: INTERNET_PORT; lpszUsername: PWideChar; lpszPassword: PWideChar;
  628.   dwService: DWORD; dwFlags: DWORD; dwContext: DWORD): HINTERNET; stdcall;
  629.   {$EXTERNALSYM InternetConnectW}
  630.  
  631. { service types for InternetConnect }
  632. const
  633.   INTERNET_SERVICE_URL = 0;
  634.   {$EXTERNALSYM INTERNET_SERVICE_URL}
  635.   INTERNET_SERVICE_FTP = 1;
  636.   {$EXTERNALSYM INTERNET_SERVICE_FTP}
  637.   INTERNET_SERVICE_GOPHER = 2;
  638.   {$EXTERNALSYM INTERNET_SERVICE_GOPHER}
  639.   INTERNET_SERVICE_HTTP = 3;
  640.   {$EXTERNALSYM INTERNET_SERVICE_HTTP}
  641.  
  642. function InternetOpenUrl(hInet: HINTERNET; lpszUrl: PChar;
  643.   lpszHeaders: PChar; dwHeadersLength: DWORD; dwFlags: DWORD;
  644.   dwContext: DWORD): HINTERNET; stdcall;
  645.   {$EXTERNALSYM InternetOpenUrl}
  646. function InternetOpenUrlA(hInet: HINTERNET; lpszUrl: PAnsiChar;
  647.   lpszHeaders: PAnsiChar; dwHeadersLength: DWORD; dwFlags: DWORD;
  648.   dwContext: DWORD): HINTERNET; stdcall;
  649.   {$EXTERNALSYM InternetOpenUrlA}
  650. function InternetOpenUrlW(hInet: HINTERNET; lpszUrl: PWideChar;
  651.   lpszHeaders: PWideChar; dwHeadersLength: DWORD; dwFlags: DWORD;
  652.   dwContext: DWORD): HINTERNET; stdcall;
  653.   {$EXTERNALSYM InternetOpenUrlW}
  654.  
  655. function InternetReadFile(hFile: HINTERNET; lpBuffer: Pointer;
  656.   dwNumberOfBytesToRead: DWORD; var lpdwNumberOfBytesRead: DWORD): BOOL; stdcall;
  657.   {$EXTERNALSYM InternetReadFile}
  658.  
  659. function InternetReadFileEx(hFile: HINTERNET;  lpBuffersOut: Pointer;
  660.   dwFlags: DWORD; dwContext: DWORD): BOOL; stdcall;
  661.   {$EXTERNALSYM InternetReadFileEx}
  662. function InternetReadFileExA(hFile: HINTERNET;  lpBuffersOut: Pointer;
  663.   dwFlags: DWORD; dwContext: DWORD): BOOL; stdcall;
  664.   {$EXTERNALSYM InternetReadFileExA}
  665. function InternetReadFileExW(hFile: HINTERNET;  lpBuffersOut: Pointer;
  666.   dwFlags: DWORD; dwContext: DWORD): BOOL; stdcall;
  667.   {$EXTERNALSYM InternetReadFileExW}
  668.  
  669. { flags for InternetReadFileEx() }
  670. const
  671.   IRF_ASYNC       = WININET_API_FLAG_ASYNC;
  672.   {$EXTERNALSYM IRF_ASYNC}
  673.   IRF_SYNC        = WININET_API_FLAG_SYNC;
  674.   {$EXTERNALSYM IRF_SYNC}
  675.   IRF_USE_CONTEXT = WININET_API_FLAG_USE_CONTEXT;
  676.   {$EXTERNALSYM IRF_USE_CONTEXT}
  677.   IRF_NO_WAIT     = $00000008;
  678.   {$EXTERNALSYM IRF_NO_WAIT}
  679.  
  680. function InternetSetFilePointer(hFile: HINTERNET;
  681.   lDistanceToMove: Longint; pReserved: Pointer;
  682.   dwMoveMethod, dwContext: DWORD): DWORD; stdcall;
  683.   {$EXTERNALSYM InternetSetFilePointer}
  684.  
  685. function InternetWriteFile(hFile: HINTERNET; lpBuffer: Pointer;
  686.   dwNumberOfBytesToWrite: DWORD;
  687.   var lpdwNumberOfBytesWritten: DWORD): BOOL; stdcall;
  688.   {$EXTERNALSYM InternetWriteFile}
  689.  
  690. function InternetQueryDataAvailable(hFile: HINTERNET; var lpdwNumberOfBytesAvailable: DWORD;
  691.   dwFlags, dwContext: DWORD): BOOL; stdcall;
  692.   {$EXTERNALSYM InternetQueryDataAvailable}
  693.  
  694. function InternetFindNextFile(hFind: HINTERNET; lpvFindData: Pointer): BOOL; stdcall;
  695.   {$EXTERNALSYM InternetFindNextFile}
  696. function InternetFindNextFileA(hFind: HINTERNET; lpvFindData: Pointer): BOOL; stdcall;
  697.   {$EXTERNALSYM InternetFindNextFileA}
  698. function InternetFindNextFileW(hFind: HINTERNET; lpvFindData: Pointer): BOOL; stdcall;
  699.   {$EXTERNALSYM InternetFindNextFileW}
  700.  
  701. function InternetQueryOption(hInet: HINTERNET; dwOption: DWORD;
  702.   lpBuffer: Pointer; var lpdwBufferLength: DWORD): BOOL; stdcall;
  703.   {$EXTERNALSYM InternetQueryOption}
  704. function InternetQueryOptionA(hInet: HINTERNET; dwOption: DWORD;
  705.   lpBuffer: Pointer; var lpdwBufferLength: DWORD): BOOL; stdcall;
  706.   {$EXTERNALSYM InternetQueryOptionA}
  707. function InternetQueryOptionW(hInet: HINTERNET; dwOption: DWORD;
  708.   lpBuffer: Pointer; var lpdwBufferLength: DWORD): BOOL; stdcall;
  709.   {$EXTERNALSYM InternetQueryOptionW}
  710.  
  711. function InternetSetOption(hInet: HINTERNET; dwOption: DWORD;
  712.   lpBuffer: Pointer; dwBufferLength: DWORD): BOOL; stdcall;
  713.   {$EXTERNALSYM InternetSetOption}
  714. function InternetSetOptionA(hInet: HINTERNET; dwOption: DWORD;
  715.   lpBuffer: Pointer; dwBufferLength: DWORD): BOOL; stdcall;
  716.   {$EXTERNALSYM InternetSetOptionA}
  717. function InternetSetOptionW(hInet: HINTERNET; dwOption: DWORD;
  718.   lpBuffer: Pointer; dwBufferLength: DWORD): BOOL; stdcall;
  719.   {$EXTERNALSYM InternetSetOptionW}
  720.  
  721. function InternetSetOptionEx(hInet: HINTERNET; dwOption: DWORD;
  722.   lpBuffer: Pointer; dwBufferLength, dwFlags: DWORD): BOOL; stdcall;
  723.   {$EXTERNALSYM InternetSetOptionEx}
  724. function InternetSetOptionExA(hInet: HINTERNET; dwOption: DWORD;
  725.   lpBuffer: Pointer; dwBufferLength, dwFlags: DWORD): BOOL; stdcall;
  726.   {$EXTERNALSYM InternetSetOptionExA}
  727. function InternetSetOptionExW(hInet: HINTERNET; dwOption: DWORD;
  728.   lpBuffer: Pointer; dwBufferLength, dwFlags: DWORD): BOOL; stdcall;
  729.   {$EXTERNALSYM InternetSetOptionExW}
  730.  
  731. function InternetLockRequestFile(hInternet: HINTERNET;
  732.   lphLockRequestInfo: PHandle): BOOL; stdcall;
  733.   {$EXTERNALSYM InternetLockRequestFile}
  734.  
  735. function InternetUnlockRequestFile(hLockRequestInfo: THANDLE): BOOL; stdcall;
  736.   {$EXTERNALSYM InternetUnlockRequestFile}
  737.  
  738. { flags for InternetSetOptionEx() }
  739. const
  740.   ISO_GLOBAL      = $00000001;  { modify option globally }
  741.   {$EXTERNALSYM ISO_GLOBAL}
  742.   ISO_REGISTRY    = $00000002;  { write option to registry (where applicable) }
  743.   {$EXTERNALSYM ISO_REGISTRY}
  744.   ISO_VALID_FLAGS = ISO_GLOBAL or ISO_REGISTRY;
  745.   {$EXTERNALSYM ISO_VALID_FLAGS}
  746.  
  747. { options manifests for Internet(Query or Set)Option }
  748. const
  749.   INTERNET_OPTION_CALLBACK = 1;
  750.   {$EXTERNALSYM INTERNET_OPTION_CALLBACK}
  751.   INTERNET_OPTION_CONNECT_TIMEOUT = 2;
  752.   {$EXTERNALSYM INTERNET_OPTION_CONNECT_TIMEOUT}
  753.   INTERNET_OPTION_CONNECT_RETRIES = 3;
  754.   {$EXTERNALSYM INTERNET_OPTION_CONNECT_RETRIES}
  755.   INTERNET_OPTION_CONNECT_BACKOFF = 4;
  756.   {$EXTERNALSYM INTERNET_OPTION_CONNECT_BACKOFF}
  757.   INTERNET_OPTION_SEND_TIMEOUT = 5;
  758.   {$EXTERNALSYM INTERNET_OPTION_SEND_TIMEOUT}
  759.   INTERNET_OPTION_CONTROL_SEND_TIMEOUT       = INTERNET_OPTION_SEND_TIMEOUT;
  760.   {$EXTERNALSYM INTERNET_OPTION_CONTROL_SEND_TIMEOUT}
  761.   INTERNET_OPTION_RECEIVE_TIMEOUT = 6;
  762.   {$EXTERNALSYM INTERNET_OPTION_RECEIVE_TIMEOUT}
  763.   INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT    = INTERNET_OPTION_RECEIVE_TIMEOUT;
  764.   {$EXTERNALSYM INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT}
  765.   INTERNET_OPTION_DATA_SEND_TIMEOUT = 7;
  766.   {$EXTERNALSYM INTERNET_OPTION_DATA_SEND_TIMEOUT}
  767.   INTERNET_OPTION_DATA_RECEIVE_TIMEOUT = 8;
  768.   {$EXTERNALSYM INTERNET_OPTION_DATA_RECEIVE_TIMEOUT}
  769.   INTERNET_OPTION_HANDLE_TYPE = 9;
  770.   {$EXTERNALSYM INTERNET_OPTION_HANDLE_TYPE}
  771.   INTERNET_OPTION_READ_BUFFER_SIZE = 12;
  772.   {$EXTERNALSYM INTERNET_OPTION_READ_BUFFER_SIZE}
  773.   INTERNET_OPTION_WRITE_BUFFER_SIZE = 13;
  774.   {$EXTERNALSYM INTERNET_OPTION_WRITE_BUFFER_SIZE}
  775.   INTERNET_OPTION_ASYNC_ID = 15;
  776.   {$EXTERNALSYM INTERNET_OPTION_ASYNC_ID}
  777.   INTERNET_OPTION_ASYNC_PRIORITY = 16;
  778.   {$EXTERNALSYM INTERNET_OPTION_ASYNC_PRIORITY}
  779.   INTERNET_OPTION_PARENT_HANDLE               = 21;
  780.   {$EXTERNALSYM INTERNET_OPTION_PARENT_HANDLE}
  781.   INTERNET_OPTION_KEEP_CONNECTION             = 22;
  782.   {$EXTERNALSYM INTERNET_OPTION_KEEP_CONNECTION}
  783.   INTERNET_OPTION_REQUEST_FLAGS               = 23;
  784.   {$EXTERNALSYM INTERNET_OPTION_REQUEST_FLAGS}
  785.   INTERNET_OPTION_EXTENDED_ERROR              = 24;
  786.   {$EXTERNALSYM INTERNET_OPTION_EXTENDED_ERROR}
  787.   INTERNET_OPTION_OFFLINE_MODE                = 26;
  788.   {$EXTERNALSYM INTERNET_OPTION_OFFLINE_MODE}
  789.   INTERNET_OPTION_CACHE_STREAM_HANDLE         = 27;
  790.   {$EXTERNALSYM INTERNET_OPTION_CACHE_STREAM_HANDLE}
  791.   INTERNET_OPTION_USERNAME                    = 28;
  792.   {$EXTERNALSYM INTERNET_OPTION_USERNAME}
  793.   INTERNET_OPTION_PASSWORD                    = 29;
  794.   {$EXTERNALSYM INTERNET_OPTION_PASSWORD}
  795.   INTERNET_OPTION_ASYNC                       = 30;
  796.   {$EXTERNALSYM INTERNET_OPTION_ASYNC}
  797.   INTERNET_OPTION_SECURITY_FLAGS              = 31;
  798.   {$EXTERNALSYM INTERNET_OPTION_SECURITY_FLAGS}
  799.   INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT = 32;
  800.   {$EXTERNALSYM INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT}
  801.   INTERNET_OPTION_DATAFILE_NAME               = 33;
  802.   {$EXTERNALSYM INTERNET_OPTION_DATAFILE_NAME}
  803.   INTERNET_OPTION_URL                         = 34;
  804.   {$EXTERNALSYM INTERNET_OPTION_URL}
  805.   INTERNET_OPTION_SECURITY_CERTIFICATE        = 35;
  806.   {$EXTERNALSYM INTERNET_OPTION_SECURITY_CERTIFICATE}
  807.   INTERNET_OPTION_SECURITY_KEY_BITNESS        = 36;
  808.   {$EXTERNALSYM INTERNET_OPTION_SECURITY_KEY_BITNESS}
  809.   INTERNET_OPTION_REFRESH                     = 37;
  810.   {$EXTERNALSYM INTERNET_OPTION_REFRESH}
  811.   INTERNET_OPTION_PROXY                       = 38;
  812.   {$EXTERNALSYM INTERNET_OPTION_PROXY}
  813.   INTERNET_OPTION_SETTINGS_CHANGED            = 39;
  814.   {$EXTERNALSYM INTERNET_OPTION_SETTINGS_CHANGED}
  815.   INTERNET_OPTION_VERSION                     = 40;
  816.   {$EXTERNALSYM INTERNET_OPTION_VERSION}
  817.   INTERNET_OPTION_USER_AGENT                  = 41;
  818.   {$EXTERNALSYM INTERNET_OPTION_USER_AGENT}
  819.   INTERNET_OPTION_END_BROWSER_SESSION         = 42;
  820.   {$EXTERNALSYM INTERNET_OPTION_END_BROWSER_SESSION}
  821.   INTERNET_OPTION_PROXY_USERNAME              = 43;
  822.   {$EXTERNALSYM INTERNET_OPTION_PROXY_USERNAME}
  823.   INTERNET_OPTION_PROXY_PASSWORD              = 44;
  824.   {$EXTERNALSYM INTERNET_OPTION_PROXY_PASSWORD}
  825.   INTERNET_OPTION_CONTEXT_VALUE               = 45;
  826.   {$EXTERNALSYM INTERNET_OPTION_CONTEXT_VALUE}
  827.   INTERNET_OPTION_CONNECT_LIMIT               = 46;
  828.   {$EXTERNALSYM INTERNET_OPTION_CONNECT_LIMIT}
  829.   INTERNET_OPTION_SECURITY_SELECT_CLIENT_CERT = 47;
  830.   {$EXTERNALSYM INTERNET_OPTION_SECURITY_SELECT_CLIENT_CERT}
  831.   INTERNET_OPTION_POLICY                      = 48;
  832.   {$EXTERNALSYM INTERNET_OPTION_POLICY}
  833.   INTERNET_OPTION_DISCONNECTED_TIMEOUT        = 49;
  834.   {$EXTERNALSYM INTERNET_OPTION_DISCONNECTED_TIMEOUT}
  835.   INTERNET_OPTION_CONNECTED_STATE             = 50;
  836.   {$EXTERNALSYM INTERNET_OPTION_CONNECTED_STATE}
  837.   INTERNET_OPTION_IDLE_STATE                  = 51;
  838.   {$EXTERNALSYM INTERNET_OPTION_IDLE_STATE}
  839.   INTERNET_OPTION_OFFLINE_SEMANTICS           = 52;
  840.   {$EXTERNALSYM INTERNET_OPTION_OFFLINE_SEMANTICS}
  841.   INTERNET_OPTION_SECONDARY_CACHE_KEY         = 53;
  842.   {$EXTERNALSYM INTERNET_OPTION_SECONDARY_CACHE_KEY}
  843.   INTERNET_OPTION_CALLBACK_FILTER             = 54;
  844.   {$EXTERNALSYM INTERNET_OPTION_CALLBACK_FILTER}
  845.   INTERNET_OPTION_CONNECT_TIME                = 55;
  846.   {$EXTERNALSYM INTERNET_OPTION_CONNECT_TIME}
  847.   INTERNET_OPTION_SEND_THROUGHPUT             = 56;
  848.   {$EXTERNALSYM INTERNET_OPTION_SEND_THROUGHPUT}
  849.   INTERNET_OPTION_RECEIVE_THROUGHPUT          = 57;
  850.   {$EXTERNALSYM INTERNET_OPTION_RECEIVE_THROUGHPUT}
  851.   INTERNET_OPTION_REQUEST_PRIORITY            = 58;
  852.   {$EXTERNALSYM INTERNET_OPTION_REQUEST_PRIORITY}
  853.   INTERNET_OPTION_HTTP_VERSION                = 59;
  854.   {$EXTERNALSYM INTERNET_OPTION_HTTP_VERSION}
  855.   INTERNET_OPTION_RESET_URLCACHE_SESSION      = 60;
  856.   {$EXTERNALSYM INTERNET_OPTION_RESET_URLCACHE_SESSION}
  857.   INTERNET_OPTION_ERROR_MASK                  = 62;
  858.   {$EXTERNALSYM INTERNET_OPTION_ERROR_MASK}
  859.   INTERNET_FIRST_OPTION                      = INTERNET_OPTION_CALLBACK;
  860.   {$EXTERNALSYM INTERNET_FIRST_OPTION}
  861.   INTERNET_LAST_OPTION                       = INTERNET_OPTION_PROXY;
  862.   {$EXTERNALSYM INTERNET_LAST_OPTION}
  863.  
  864. { values for INTERNET_OPTION_PRIORITY }
  865.  
  866.   INTERNET_PRIORITY_FOREGROUND = 1000;
  867.   {$EXTERNALSYM INTERNET_PRIORITY_FOREGROUND}
  868.  
  869. { handle types }
  870.  
  871.   INTERNET_HANDLE_TYPE_INTERNET = 1;
  872.   {$EXTERNALSYM INTERNET_HANDLE_TYPE_INTERNET}
  873.   INTERNET_HANDLE_TYPE_CONNECT_FTP = 2;
  874.   {$EXTERNALSYM INTERNET_HANDLE_TYPE_CONNECT_FTP}
  875.   INTERNET_HANDLE_TYPE_CONNECT_GOPHER = 3;
  876.   {$EXTERNALSYM INTERNET_HANDLE_TYPE_CONNECT_GOPHER}
  877.   INTERNET_HANDLE_TYPE_CONNECT_HTTP = 4;
  878.   {$EXTERNALSYM INTERNET_HANDLE_TYPE_CONNECT_HTTP}
  879.   INTERNET_HANDLE_TYPE_FTP_FIND = 5;
  880.   {$EXTERNALSYM INTERNET_HANDLE_TYPE_FTP_FIND}
  881.   INTERNET_HANDLE_TYPE_FTP_FIND_HTML = 6;
  882.   {$EXTERNALSYM INTERNET_HANDLE_TYPE_FTP_FIND_HTML}
  883.   INTERNET_HANDLE_TYPE_FTP_FILE = 7;
  884.   {$EXTERNALSYM INTERNET_HANDLE_TYPE_FTP_FILE}
  885.   INTERNET_HANDLE_TYPE_FTP_FILE_HTML = 8;
  886.   {$EXTERNALSYM INTERNET_HANDLE_TYPE_FTP_FILE_HTML}
  887.   INTERNET_HANDLE_TYPE_GOPHER_FIND = 9;
  888.   {$EXTERNALSYM INTERNET_HANDLE_TYPE_GOPHER_FIND}
  889.   INTERNET_HANDLE_TYPE_GOPHER_FIND_HTML = 10;
  890.   {$EXTERNALSYM INTERNET_HANDLE_TYPE_GOPHER_FIND_HTML}
  891.   INTERNET_HANDLE_TYPE_GOPHER_FILE = 11;
  892.   {$EXTERNALSYM INTERNET_HANDLE_TYPE_GOPHER_FILE}
  893.   INTERNET_HANDLE_TYPE_GOPHER_FILE_HTML = 12;
  894.   {$EXTERNALSYM INTERNET_HANDLE_TYPE_GOPHER_FILE_HTML}
  895.   INTERNET_HANDLE_TYPE_HTTP_REQUEST = 13;
  896.   {$EXTERNALSYM INTERNET_HANDLE_TYPE_HTTP_REQUEST}
  897.  
  898. { values for INTERNET_OPTION_SECURITY_FLAGS }
  899.  
  900.   SECURITY_FLAG_SECURE                        = $00000001; { can query only }
  901.   {$EXTERNALSYM SECURITY_FLAG_SECURE}
  902.   SECURITY_FLAG_SSL                           = $00000002;
  903.   {$EXTERNALSYM SECURITY_FLAG_SSL}
  904.   SECURITY_FLAG_SSL3                          = $00000004;
  905.   {$EXTERNALSYM SECURITY_FLAG_SSL3}
  906.   SECURITY_FLAG_PCT                           = $00000008;
  907.   {$EXTERNALSYM SECURITY_FLAG_PCT}
  908.   SECURITY_FLAG_PCT4                          = $00000010;
  909.   {$EXTERNALSYM SECURITY_FLAG_PCT4}
  910.   SECURITY_FLAG_IETFSSL4                      = $00000020;
  911.   {$EXTERNALSYM SECURITY_FLAG_IETFSSL4}
  912.   SECURITY_FLAG_STRENGTH_WEAK                 = $10000000;
  913.   {$EXTERNALSYM SECURITY_FLAG_STRENGTH_WEAK}
  914.   SECURITY_FLAG_STRENGTH_MEDIUM               = $40000000;
  915.   {$EXTERNALSYM SECURITY_FLAG_STRENGTH_MEDIUM}
  916.   SECURITY_FLAG_STRENGTH_STRONG               = $20000000;
  917.   {$EXTERNALSYM SECURITY_FLAG_STRENGTH_STRONG}
  918.   SECURITY_FLAG_40BIT                         = SECURITY_FLAG_STRENGTH_WEAK;
  919.   {$EXTERNALSYM SECURITY_FLAG_40BIT}
  920.   SECURITY_FLAG_128BIT                        = SECURITY_FLAG_STRENGTH_STRONG;
  921.   {$EXTERNALSYM SECURITY_FLAG_128BIT}
  922.   SECURITY_FLAG_56BIT                         = SECURITY_FLAG_STRENGTH_MEDIUM;
  923.   {$EXTERNALSYM SECURITY_FLAG_56BIT}
  924.   SECURITY_FLAG_UNKNOWNBIT                    = $80000000;
  925.   {$EXTERNALSYM SECURITY_FLAG_UNKNOWNBIT}
  926.   SECURITY_FLAG_NORMALBITNESS                 = SECURITY_FLAG_40BIT;
  927.   {$EXTERNALSYM SECURITY_FLAG_NORMALBITNESS}
  928.   SECURITY_FLAG_IGNORE_REVOCATION             = $00000080;
  929.   {$EXTERNALSYM SECURITY_FLAG_IGNORE_REVOCATION}
  930.   SECURITY_FLAG_IGNORE_UNKNOWN_CA             = $00000100;
  931.   {$EXTERNALSYM SECURITY_FLAG_IGNORE_UNKNOWN_CA}
  932.   SECURITY_FLAG_IGNORE_WRONG_USAGE            = $00000200;
  933.   {$EXTERNALSYM SECURITY_FLAG_IGNORE_WRONG_USAGE}
  934.   SECURITY_FLAG_IGNORE_CERT_CN_INVALID        = INTERNET_FLAG_IGNORE_CERT_CN_INVALID;
  935.   {$EXTERNALSYM SECURITY_FLAG_IGNORE_CERT_CN_INVALID}
  936.   SECURITY_FLAG_IGNORE_CERT_DATE_INVALID      = INTERNET_FLAG_IGNORE_CERT_DATE_INVALID;
  937.   {$EXTERNALSYM SECURITY_FLAG_IGNORE_CERT_DATE_INVALID}
  938.   SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTPS      = INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS;
  939.   {$EXTERNALSYM SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTPS}
  940.   SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTP       = INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP;
  941.   {$EXTERNALSYM SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTP}
  942.  
  943. function InternetGetLastResponseInfo(var lpdwError: DWORD; lpszBuffer: PChar;
  944.   var lpdwBufferLength: DWORD): BOOL; stdcall;
  945.   {$EXTERNALSYM InternetGetLastResponseInfo}
  946. function InternetGetLastResponseInfoA(var lpdwError: DWORD; lpszBuffer: PAnsiChar;
  947.   var lpdwBufferLength: DWORD): BOOL; stdcall;
  948.   {$EXTERNALSYM InternetGetLastResponseInfoA}
  949. function InternetGetLastResponseInfoW(var lpdwError: DWORD; lpszBuffer: PWideChar;
  950.   var lpdwBufferLength: DWORD): BOOL; stdcall;
  951.   {$EXTERNALSYM InternetGetLastResponseInfoW}
  952.  
  953. { callback function for InternetSetStatusCallback }
  954. type
  955.  
  956.  
  957.  
  958.  
  959.  
  960.   INTERNET_STATUS_CALLBACK = TFarProc;
  961.  
  962.   {$EXTERNALSYM INTERNET_STATUS_CALLBACK}
  963.   TFNInternetStatusCallback = INTERNET_STATUS_CALLBACK;
  964.   PFNInternetStatusCallback = ^TFNInternetStatusCallback;
  965.   LPINTERNET_STATUS_CALLBACK = PFNInternetStatusCallback;
  966.   {$EXTERNALSYM LPINTERNET_STATUS_CALLBACK}
  967.  
  968. function InternetSetStatusCallback(hInet: HINTERNET;
  969.   lpfnInternetCallback: PFNInternetStatusCallback): PFNInternetStatusCallback; stdcall;
  970.   {$EXTERNALSYM InternetSetStatusCallback}
  971.  
  972. { status manifests for Internet status callback }
  973. const
  974.   INTERNET_STATUS_RESOLVING_NAME              = 10;
  975.   {$EXTERNALSYM INTERNET_STATUS_RESOLVING_NAME}
  976.   INTERNET_STATUS_NAME_RESOLVED               = 11;
  977.   {$EXTERNALSYM INTERNET_STATUS_NAME_RESOLVED}
  978.   INTERNET_STATUS_CONNECTING_TO_SERVER        = 20;
  979.   {$EXTERNALSYM INTERNET_STATUS_CONNECTING_TO_SERVER}
  980.   INTERNET_STATUS_CONNECTED_TO_SERVER         = 21;
  981.   {$EXTERNALSYM INTERNET_STATUS_CONNECTED_TO_SERVER}
  982.   INTERNET_STATUS_SENDING_REQUEST             = 30;
  983.   {$EXTERNALSYM INTERNET_STATUS_SENDING_REQUEST}
  984.   INTERNET_STATUS_REQUEST_SENT                = 31;
  985.   {$EXTERNALSYM INTERNET_STATUS_REQUEST_SENT}
  986.   INTERNET_STATUS_RECEIVING_RESPONSE          = 40;
  987.   {$EXTERNALSYM INTERNET_STATUS_RECEIVING_RESPONSE}
  988.   INTERNET_STATUS_RESPONSE_RECEIVED           = 41;
  989.   {$EXTERNALSYM INTERNET_STATUS_RESPONSE_RECEIVED}
  990.   INTERNET_STATUS_CTL_RESPONSE_RECEIVED       = 42;
  991.   {$EXTERNALSYM INTERNET_STATUS_CTL_RESPONSE_RECEIVED}
  992.   INTERNET_STATUS_PREFETCH                    = 43;
  993.   {$EXTERNALSYM INTERNET_STATUS_PREFETCH}
  994.   INTERNET_STATUS_CLOSING_CONNECTION          = 50;
  995.   {$EXTERNALSYM INTERNET_STATUS_CLOSING_CONNECTION}
  996.   INTERNET_STATUS_CONNECTION_CLOSED           = 51;
  997.   {$EXTERNALSYM INTERNET_STATUS_CONNECTION_CLOSED}
  998.   INTERNET_STATUS_HANDLE_CREATED              = 60;
  999.   {$EXTERNALSYM INTERNET_STATUS_HANDLE_CREATED}
  1000.   INTERNET_STATUS_HANDLE_CLOSING              = 70;
  1001.   {$EXTERNALSYM INTERNET_STATUS_HANDLE_CLOSING}
  1002.   INTERNET_STATUS_REQUEST_COMPLETE            = 100;
  1003.   {$EXTERNALSYM INTERNET_STATUS_REQUEST_COMPLETE}
  1004.   INTERNET_STATUS_REDIRECT                    = 110;
  1005.   {$EXTERNALSYM INTERNET_STATUS_REDIRECT}
  1006.   INTERNET_STATUS_INTERMEDIATE_RESPONSE       = 120;
  1007.   {$EXTERNALSYM INTERNET_STATUS_INTERMEDIATE_RESPONSE}
  1008.   INTERNET_STATUS_STATE_CHANGE                = 200;
  1009.   {$EXTERNALSYM INTERNET_STATUS_STATE_CHANGE}
  1010.  
  1011. { the following can be indicated in a state change notification: }
  1012.   INTERNET_STATE_CONNECTED                    = $00000001;  { connected state (mutually exclusive with disconnected) }
  1013.   {$EXTERNALSYM INTERNET_STATE_CONNECTED}
  1014.   INTERNET_STATE_DISCONNECTED                 = $00000002;  { disconnected from network }
  1015.   {$EXTERNALSYM INTERNET_STATE_DISCONNECTED}
  1016.   INTERNET_STATE_DISCONNECTED_BY_USER         = $00000010;  { disconnected by user request }
  1017.   {$EXTERNALSYM INTERNET_STATE_DISCONNECTED_BY_USER}
  1018.   INTERNET_STATE_IDLE                         = $00000100;  { no network requests being made (by Wininet) }
  1019.   {$EXTERNALSYM INTERNET_STATE_IDLE}
  1020.   INTERNET_STATE_BUSY                         = $00000200;  { network requests being made (by Wininet) }
  1021.   {$EXTERNALSYM INTERNET_STATE_BUSY}
  1022.  
  1023. { if the following value is returned by InternetSetStatusCallback, then }
  1024. { probably an invalid (non-code) address was supplied for the callback }
  1025.  
  1026.   INTERNET_INVALID_STATUS_CALLBACK = (-1);
  1027.   {$EXTERNALSYM INTERNET_INVALID_STATUS_CALLBACK}
  1028.  
  1029. { prototypes }
  1030.  
  1031. function FtpFindFirstFile(hConnect: HINTERNET; lpszSearchFile: PChar;
  1032.   var lpFindFileData: TWin32FindData; dwFlags: DWORD;
  1033.   dwContext: DWORD): HINTERNET; stdcall;
  1034.   {$EXTERNALSYM FtpFindFirstFile}
  1035. function FtpFindFirstFileA(hConnect: HINTERNET; lpszSearchFile: PAnsiChar;
  1036.   var lpFindFileData: TWin32FindDataA; dwFlags: DWORD;
  1037.   dwContext: DWORD): HINTERNET; stdcall;
  1038.   {$EXTERNALSYM FtpFindFirstFileA}
  1039. function FtpFindFirstFileW(hConnect: HINTERNET; lpszSearchFile: PWideChar;
  1040.   var lpFindFileData: TWin32FindDataW; dwFlags: DWORD;
  1041.   dwContext: DWORD): HINTERNET; stdcall;
  1042.   {$EXTERNALSYM FtpFindFirstFileW}
  1043.  
  1044. function FtpGetFile(hConnect: HINTERNET; lpszRemoteFile: PChar;
  1045.   lpszNewFile: PChar; fFailIfExists: BOOL; dwFlagsAndAttributes: DWORD;
  1046.   dwFlags: DWORD; dwContext: DWORD): BOOL stdcall;
  1047.   {$EXTERNALSYM FtpGetFile}
  1048. function FtpGetFileA(hConnect: HINTERNET; lpszRemoteFile: PAnsiChar;
  1049.   lpszNewFile: PAnsiChar; fFailIfExists: BOOL; dwFlagsAndAttributes: DWORD;
  1050.   dwFlags: DWORD; dwContext: DWORD): BOOL stdcall;
  1051.   {$EXTERNALSYM FtpGetFileA}
  1052. function FtpGetFileW(hConnect: HINTERNET; lpszRemoteFile: PWideChar;
  1053.   lpszNewFile: PWideChar; fFailIfExists: BOOL; dwFlagsAndAttributes: DWORD;
  1054.   dwFlags: DWORD; dwContext: DWORD): BOOL stdcall;
  1055.   {$EXTERNALSYM FtpGetFileW}
  1056.  
  1057. function FtpPutFile(hConnect: HINTERNET; lpszLocalFile: PChar;
  1058.   lpszNewRemoteFile: PChar; dwFlags: DWORD; dwContext: DWORD): BOOL; stdcall;
  1059.   {$EXTERNALSYM FtpPutFile}
  1060. function FtpPutFileA(hConnect: HINTERNET; lpszLocalFile: PAnsiChar;
  1061.   lpszNewRemoteFile: PAnsiChar; dwFlags: DWORD; dwContext: DWORD): BOOL; stdcall;
  1062.   {$EXTERNALSYM FtpPutFileA}
  1063. function FtpPutFileW(hConnect: HINTERNET; lpszLocalFile: PWideChar;
  1064.   lpszNewRemoteFile: PWideChar; dwFlags: DWORD; dwContext: DWORD): BOOL; stdcall;
  1065.   {$EXTERNALSYM FtpPutFileW}
  1066.  
  1067. function FtpDeleteFile(hConnect: HINTERNET; lpszFileName: PChar): BOOL; stdcall;
  1068.   {$EXTERNALSYM FtpDeleteFile}
  1069. function FtpDeleteFileA(hConnect: HINTERNET; lpszFileName: PAnsiChar): BOOL; stdcall;
  1070.   {$EXTERNALSYM FtpDeleteFileA}
  1071. function FtpDeleteFileW(hConnect: HINTERNET; lpszFileName: PWideChar): BOOL; stdcall;
  1072.   {$EXTERNALSYM FtpDeleteFileW}
  1073.  
  1074. function FtpRenameFile(hConnect: HINTERNET; lpszExisting: PChar;
  1075.   lpszNew: PChar): BOOL; stdcall;
  1076.   {$EXTERNALSYM FtpRenameFile}
  1077. function FtpRenameFileA(hConnect: HINTERNET; lpszExisting: PAnsiChar;
  1078.   lpszNew: PAnsiChar): BOOL; stdcall;
  1079.   {$EXTERNALSYM FtpRenameFileA}
  1080. function FtpRenameFileW(hConnect: HINTERNET; lpszExisting: PWideChar;
  1081.   lpszNew: PWideChar): BOOL; stdcall;
  1082.   {$EXTERNALSYM FtpRenameFileW}
  1083.  
  1084. function FtpOpenFile(hConnect: HINTERNET; lpszFileName: PChar;
  1085.   dwAccess: DWORD; dwFlags: DWORD; dwContext: DWORD): HINTERNET; stdcall;
  1086.   {$EXTERNALSYM FtpOpenFile}
  1087. function FtpOpenFileA(hConnect: HINTERNET; lpszFileName: PAnsiChar;
  1088.   dwAccess: DWORD; dwFlags: DWORD; dwContext: DWORD): HINTERNET; stdcall;
  1089.   {$EXTERNALSYM FtpOpenFileA}
  1090. function FtpOpenFileW(hConnect: HINTERNET; lpszFileName: PWideChar;
  1091.   dwAccess: DWORD; dwFlags: DWORD; dwContext: DWORD): HINTERNET; stdcall;
  1092.   {$EXTERNALSYM FtpOpenFileW}
  1093.  
  1094. function FtpCreateDirectory(hConnect: HINTERNET; lpszDirectory: PChar): BOOL; stdcall;
  1095.   {$EXTERNALSYM FtpCreateDirectory}
  1096. function FtpCreateDirectoryA(hConnect: HINTERNET; lpszDirectory: PAnsiChar): BOOL; stdcall;
  1097.   {$EXTERNALSYM FtpCreateDirectoryA}
  1098. function FtpCreateDirectoryW(hConnect: HINTERNET; lpszDirectory: PWideChar): BOOL; stdcall;
  1099.   {$EXTERNALSYM FtpCreateDirectoryW}
  1100.  
  1101. function FtpRemoveDirectory(hConnect: HINTERNET; lpszDirectory: PChar): BOOL; stdcall;
  1102.   {$EXTERNALSYM FtpRemoveDirectory}
  1103. function FtpRemoveDirectoryA(hConnect: HINTERNET; lpszDirectory: PAnsiChar): BOOL; stdcall;
  1104.   {$EXTERNALSYM FtpRemoveDirectoryA}
  1105. function FtpRemoveDirectoryW(hConnect: HINTERNET; lpszDirectory: PWideChar): BOOL; stdcall;
  1106.   {$EXTERNALSYM FtpRemoveDirectoryW}
  1107.  
  1108. function FtpSetCurrentDirectory(hConnect: HINTERNET; lpszDirectory: PChar): BOOL; stdcall;
  1109.   {$EXTERNALSYM FtpSetCurrentDirectory}
  1110. function FtpSetCurrentDirectoryA(hConnect: HINTERNET; lpszDirectory: PAnsiChar): BOOL; stdcall;
  1111.   {$EXTERNALSYM FtpSetCurrentDirectoryA}
  1112. function FtpSetCurrentDirectoryW(hConnect: HINTERNET; lpszDirectory: PWideChar): BOOL; stdcall;
  1113.   {$EXTERNALSYM FtpSetCurrentDirectoryW}
  1114.  
  1115. function FtpGetCurrentDirectory(hConnect: HINTERNET;
  1116.   lpszCurrentDirectory: PChar; var lpdwCurrentDirectory: DWORD): BOOL; stdcall;
  1117.   {$EXTERNALSYM FtpGetCurrentDirectory}
  1118. function FtpGetCurrentDirectoryA(hConnect: HINTERNET;
  1119.   lpszCurrentDirectory: PAnsiChar; var lpdwCurrentDirectory: DWORD): BOOL; stdcall;
  1120.   {$EXTERNALSYM FtpGetCurrentDirectoryA}
  1121. function FtpGetCurrentDirectoryW(hConnect: HINTERNET;
  1122.   lpszCurrentDirectory: PWideChar; var lpdwCurrentDirectory: DWORD): BOOL; stdcall;
  1123.   {$EXTERNALSYM FtpGetCurrentDirectoryW}
  1124.  
  1125. function FtpCommand(hConnect: HINTERNET; fExpectResponse: BOOL;
  1126.   dwFlags: DWORD; lpszCommand: PChar; dwContext: DWORD): BOOL; stdcall;
  1127.   {$EXTERNALSYM FtpCommand}
  1128. function FtpCommandA(hConnect: HINTERNET; fExpectResponse: BOOL;
  1129.   dwFlags: DWORD; lpszCommand: PAnsiChar; dwContext: DWORD): BOOL; stdcall;
  1130.   {$EXTERNALSYM FtpCommandA}
  1131. function FtpCommandW(hConnect: HINTERNET; fExpectResponse: BOOL;
  1132.   dwFlags: DWORD; lpszCommand: PWideChar; dwContext: DWORD): BOOL; stdcall;
  1133.   {$EXTERNALSYM FtpCommandW}
  1134.  
  1135. function FtpGetFileSize(hFile: HINTERNET; lpdwFileSizeHigh: LPDWORD): DWORD; stdcall;
  1136.   {$EXTERNALSYM FtpGetFileSize}
  1137.  
  1138. { Gopher }
  1139.  
  1140. { manifests }
  1141.  
  1142. { string field lengths (in characters, not bytes) }
  1143. const
  1144.   MAX_GOPHER_DISPLAY_TEXT   = 128;
  1145.   {$EXTERNALSYM MAX_GOPHER_DISPLAY_TEXT}
  1146.   MAX_GOPHER_SELECTOR_TEXT  = 256;
  1147.   {$EXTERNALSYM MAX_GOPHER_SELECTOR_TEXT}
  1148.   MAX_GOPHER_HOST_NAME      = INTERNET_MAX_HOST_NAME_LENGTH;
  1149.   {$EXTERNALSYM MAX_GOPHER_HOST_NAME}
  1150.   MAX_GOPHER_LOCATOR_LENGTH = 1
  1151.                               + MAX_GOPHER_DISPLAY_TEXT
  1152.                               + 1
  1153.                               + MAX_GOPHER_SELECTOR_TEXT
  1154.                               + 1
  1155.                               + MAX_GOPHER_HOST_NAME
  1156.                               + 1
  1157.                               + INTERNET_MAX_PORT_NUMBER_LENGTH
  1158.                               + 1
  1159.                               + 1
  1160.                               + 2;
  1161.   {$EXTERNALSYM MAX_GOPHER_LOCATOR_LENGTH}
  1162.  
  1163. { structures/types }
  1164.  
  1165. { GOPHER_FIND_DATA - returns the results of a GopherFindFirstFile/ }
  1166. { InternetFindNextFile request }
  1167.  
  1168. type
  1169.   PGopherFindDataA = ^GOPHER_FIND_DATAA;
  1170.   PGopherFindDataW = ^GOPHER_FIND_DATAW;
  1171.   PGopherFindData = PGopherFindDataA;
  1172.   GOPHER_FIND_DATAA = record
  1173.     DisplayString: packed array[0..MAX_GOPHER_DISPLAY_TEXT-1] of AnsiChar;
  1174.     GopherType: DWORD;  { GopherType - if known }
  1175.     SizeLow: DWORD;
  1176.     SizeHigh: DWORD;
  1177.     LastModificationTime: TFileTime;
  1178.     Locator: packed array[0..MAX_GOPHER_LOCATOR_LENGTH-1] of AnsiChar;
  1179.   end;
  1180.   {$EXTERNALSYM GOPHER_FIND_DATAA}
  1181.   GOPHER_FIND_DATAW = record
  1182.     DisplayString: packed array[0..MAX_GOPHER_DISPLAY_TEXT-1] of WideChar;
  1183.     GopherType: DWORD;  { GopherType - if known }
  1184.     SizeLow: DWORD;
  1185.     SizeHigh: DWORD;
  1186.     LastModificationTime: TFileTime;
  1187.     Locator: packed array[0..MAX_GOPHER_LOCATOR_LENGTH-1] of WideChar;
  1188.   end;
  1189.   {$EXTERNALSYM GOPHER_FIND_DATAW}
  1190.   GOPHER_FIND_DATA = GOPHER_FIND_DATAA;
  1191.   TGopherFindDataA = GOPHER_FIND_DATAA;
  1192.   LPGOPHER_FIND_DATAA = PGopherFindDataA;
  1193.   {$EXTERNALSYM LPGOPHER_FIND_DATAA}
  1194.   TGopherFindDataW = GOPHER_FIND_DATAW;
  1195.   LPGOPHER_FIND_DATAW = PGopherFindDataW;
  1196.   {$EXTERNALSYM LPGOPHER_FIND_DATAW}
  1197.   TGopherFindData = TGopherFindDataA;
  1198.  
  1199. { manifests for GopherType }
  1200. const
  1201.   GOPHER_TYPE_TEXT_FILE = $00000001;
  1202.   {$EXTERNALSYM GOPHER_TYPE_TEXT_FILE}
  1203.   GOPHER_TYPE_DIRECTORY = $00000002;
  1204.   {$EXTERNALSYM GOPHER_TYPE_DIRECTORY}
  1205.   GOPHER_TYPE_CSO = $00000004;
  1206.   {$EXTERNALSYM GOPHER_TYPE_CSO}
  1207.   GOPHER_TYPE_ERROR = $00000008;
  1208.   {$EXTERNALSYM GOPHER_TYPE_ERROR}
  1209.   GOPHER_TYPE_MAC_BINHEX = $00000010;
  1210.   {$EXTERNALSYM GOPHER_TYPE_MAC_BINHEX}
  1211.   GOPHER_TYPE_DOS_ARCHIVE = $00000020;
  1212.   {$EXTERNALSYM GOPHER_TYPE_DOS_ARCHIVE}
  1213.   GOPHER_TYPE_UNIX_UUENCODED = $00000040;
  1214.   {$EXTERNALSYM GOPHER_TYPE_UNIX_UUENCODED}
  1215.   GOPHER_TYPE_INDEX_SERVER = $00000080;
  1216.   {$EXTERNALSYM GOPHER_TYPE_INDEX_SERVER}
  1217.   GOPHER_TYPE_TELNET = $00000100;
  1218.   {$EXTERNALSYM GOPHER_TYPE_TELNET}
  1219.   GOPHER_TYPE_BINARY = $00000200;
  1220.   {$EXTERNALSYM GOPHER_TYPE_BINARY}
  1221.   GOPHER_TYPE_REDUNDANT = $00000400;
  1222.   {$EXTERNALSYM GOPHER_TYPE_REDUNDANT}
  1223.   GOPHER_TYPE_TN3270 = $00000800;
  1224.   {$EXTERNALSYM GOPHER_TYPE_TN3270}
  1225.   GOPHER_TYPE_GIF = $00001000;
  1226.   {$EXTERNALSYM GOPHER_TYPE_GIF}
  1227.   GOPHER_TYPE_IMAGE = $00002000;
  1228.   {$EXTERNALSYM GOPHER_TYPE_IMAGE}
  1229.   GOPHER_TYPE_BITMAP = $00004000;
  1230.   {$EXTERNALSYM GOPHER_TYPE_BITMAP}
  1231.   GOPHER_TYPE_MOVIE = $00008000;
  1232.   {$EXTERNALSYM GOPHER_TYPE_MOVIE}
  1233.   GOPHER_TYPE_SOUND = $00010000;
  1234.   {$EXTERNALSYM GOPHER_TYPE_SOUND}
  1235.   GOPHER_TYPE_HTML = $00020000;
  1236.   {$EXTERNALSYM GOPHER_TYPE_HTML}
  1237.   GOPHER_TYPE_PDF = $00040000;
  1238.   {$EXTERNALSYM GOPHER_TYPE_PDF}
  1239.   GOPHER_TYPE_CALENDAR = $00080000;
  1240.   {$EXTERNALSYM GOPHER_TYPE_CALENDAR}
  1241.   GOPHER_TYPE_INLINE = $00100000;
  1242.   {$EXTERNALSYM GOPHER_TYPE_INLINE}
  1243.   GOPHER_TYPE_UNKNOWN = $20000000;
  1244.   {$EXTERNALSYM GOPHER_TYPE_UNKNOWN}
  1245.   GOPHER_TYPE_ASK = $40000000;
  1246.   {$EXTERNALSYM GOPHER_TYPE_ASK}
  1247.   GOPHER_TYPE_GOPHER_PLUS = $80000000;
  1248.   {$EXTERNALSYM GOPHER_TYPE_GOPHER_PLUS}
  1249.  
  1250. { Gopher Type functions }
  1251.  
  1252. function IS_GOPHER_FILE(GopherType: DWORD): BOOL;
  1253.   {$EXTERNALSYM IS_GOPHER_FILE}
  1254. function IS_GOPHER_DIRECTORY(GopherType: DWORD): BOOL;
  1255.   {$EXTERNALSYM IS_GOPHER_DIRECTORY}
  1256. function IS_GOPHER_PHONE_SERVER(GopherType: DWORD): BOOL;
  1257.   {$EXTERNALSYM IS_GOPHER_PHONE_SERVER
  1258. function IS_GOPHER_ERROR(GopherType: DWORD): BOOL;
  1259.   {$EXTERNALSYM IS_GOPHER_ERROR}
  1260. function IS_GOPHER_INDEX_SERVER(GopherType: DWORD): BOOL;
  1261.   {$EXTERNALSYM IS_GOPHER_INDEX_SERVER}
  1262. function IS_GOPHER_TELNET_SESSION(GopherType: DWORD): BOOL;
  1263.   {$EXTERNALSYM IS_GOPHER_TELNET_SESSION}
  1264. function IS_GOPHER_BACKUP_SERVER(GopherType: DWORD): BOOL;
  1265.   {$EXTERNALSYM IS_GOPHER_BACKUP_SERVER}
  1266. function IS_GOPHER_TN3270_SESSION(GopherType: DWORD): BOOL;
  1267.   {$EXTERNALSYM IS_GOPHER_TN3270_SESSION}
  1268. function IS_GOPHER_ASK(GopherType: DWORD): BOOL;
  1269.   {$EXTERNALSYM IS_GOPHER_ASK}
  1270. function IS_GOPHER_PLUS(GopherType: DWORD): BOOL;
  1271.   {$EXTERNALSYM IS_GOPHER_PLUS}
  1272. function IS_GOPHER_TYPE_KNOWN(GopherType: DWORD): BOOL;
  1273.   {$EXTERNALSYM IS_GOPHER_TYPE_KNOWN}
  1274.  
  1275. { GOPHER_TYPE_FILE_MASK - use this to determine if a locator identifies a }
  1276. { (known) file type }
  1277. const
  1278.   GOPHER_TYPE_FILE_MASK = GOPHER_TYPE_TEXT_FILE
  1279.                           or GOPHER_TYPE_MAC_BINHEX
  1280.                           or GOPHER_TYPE_DOS_ARCHIVE
  1281.                           or GOPHER_TYPE_UNIX_UUENCODED
  1282.                           or GOPHER_TYPE_BINARY
  1283.                           or GOPHER_TYPE_GIF
  1284.                           or GOPHER_TYPE_IMAGE
  1285.                           or GOPHER_TYPE_BITMAP
  1286.                           or GOPHER_TYPE_MOVIE
  1287.                           or GOPHER_TYPE_SOUND
  1288.                           or GOPHER_TYPE_HTML
  1289.                           or GOPHER_TYPE_PDF
  1290.                           or GOPHER_TYPE_CALENDAR
  1291.                           or GOPHER_TYPE_INLINE;
  1292.   {$EXTERNALSYM GOPHER_TYPE_FILE_MASK}
  1293.  
  1294. { structured gopher attributes (as defined in gopher+ protocol document) }
  1295. type
  1296.   PGopherAdminAttributeType = ^GOPHER_ADMIN_ATTRIBUTE_TYPE;
  1297.   GOPHER_ADMIN_ATTRIBUTE_TYPE = record
  1298.     Comment: LPCSTR;
  1299.     EmailAddress: LPCSTR;
  1300.   end;
  1301.   {$EXTERNALSYM GOPHER_ADMIN_ATTRIBUTE_TYPE}
  1302.   TGopherAdminAttributeType = GOPHER_ADMIN_ATTRIBUTE_TYPE;
  1303.   LPGOPHER_ADMIN_ATTRIBUTE_TYPE = PGopherAdminAttributeType;
  1304.   {$EXTERNALSYM LPGOPHER_ADMIN_ATTRIBUTE_TYPE}
  1305.  
  1306.   PGopherModDateAttributeType = ^GOPHER_MOD_DATE_ATTRIBUTE_TYPE;
  1307.   GOPHER_MOD_DATE_ATTRIBUTE_TYPE = record
  1308.     DateAndTime: TFileTime;
  1309.   end;
  1310.   {$EXTERNALSYM GOPHER_MOD_DATE_ATTRIBUTE_TYPE}
  1311.   TGopherModDateAttributeType = GOPHER_MOD_DATE_ATTRIBUTE_TYPE;
  1312.   LPGOPHER_MOD_DATE_ATTRIBUTE_TYPE = PGopherModDateAttributeType;
  1313.   {$EXTERNALSYM LPGOPHER_MOD_DATE_ATTRIBUTE_TYPE}
  1314.  
  1315.   PGopherTtlAttributeType = ^GOPHER_TTL_ATTRIBUTE_TYPE;
  1316.   GOPHER_TTL_ATTRIBUTE_TYPE = record
  1317.     Ttl: DWORD;
  1318.   end;
  1319.   {$EXTERNALSYM GOPHER_TTL_ATTRIBUTE_TYPE}
  1320.   TGopherTtlAttributeType = GOPHER_TTL_ATTRIBUTE_TYPE;
  1321.   LPGOPHER_TTL_ATTRIBUTE_TYPE = PGopherTtlAttributeType;
  1322.   {$EXTERNALSYM LPGOPHER_TTL_ATTRIBUTE_TYPE}
  1323.  
  1324.   PGopherScoreAttributeType = ^GOPHER_SCORE_ATTRIBUTE_TYPE;
  1325.   GOPHER_SCORE_ATTRIBUTE_TYPE = record
  1326.     Score: Integer;
  1327.   end;
  1328.   {$EXTERNALSYM GOPHER_SCORE_ATTRIBUTE_TYPE}
  1329.   TGopherScoreAttributeType = GOPHER_SCORE_ATTRIBUTE_TYPE;
  1330.   LPGOPHER_SCORE_ATTRIBUTE_TYPE = PGopherScoreAttributeType;
  1331.   {$EXTERNALSYM LPGOPHER_SCORE_ATTRIBUTE_TYPE}
  1332.  
  1333.   PGopherScoreRangeAttributeType = ^GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE;
  1334.   GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE = record
  1335.     LowerBound: Integer;
  1336.     UpperBound: Integer;
  1337.   end;
  1338.   {$EXTERNALSYM GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE}
  1339.   TGopherScoreRangeAttributeType = GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE;
  1340.   LPGOPHER_SCORE_RANGE_ATTRIBUTE_TYPE = PGopherScoreRangeAttributeType;
  1341.   {$EXTERNALSYM LPGOPHER_SCORE_RANGE_ATTRIBUTE_TYPE}
  1342.  
  1343.   PGopherSiteAttributeType = ^GOPHER_SITE_ATTRIBUTE_TYPE;
  1344.   GOPHER_SITE_ATTRIBUTE_TYPE = record
  1345.     Site: LPCSTR;
  1346.   end;
  1347.   {$EXTERNALSYM GOPHER_SITE_ATTRIBUTE_TYPE}
  1348.   TGopherSiteAttributeType = GOPHER_SITE_ATTRIBUTE_TYPE;
  1349.   LPGOPHER_SITE_ATTRIBUTE_TYPE = PGopherSiteAttributeType;
  1350.   {$EXTERNALSYM LPGOPHER_SITE_ATTRIBUTE_TYPE}
  1351.  
  1352.   PGopherOrganizationAttributeType = ^GOPHER_ORGANIZATION_ATTRIBUTE_TYPE;
  1353.   GOPHER_ORGANIZATION_ATTRIBUTE_TYPE = record
  1354.     Organization: LPCSTR;
  1355.   end;
  1356.   {$EXTERNALSYM GOPHER_ORGANIZATION_ATTRIBUTE_TYPE}
  1357.   TGopherOrganizationAttributeType = GOPHER_ORGANIZATION_ATTRIBUTE_TYPE;
  1358.   LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPE = PGopherOrganizationAttributeType;
  1359.   {$EXTERNALSYM LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPE}
  1360.  
  1361.   PGopherLocationAttributeType = ^GOPHER_LOCATION_ATTRIBUTE_TYPE;
  1362.   GOPHER_LOCATION_ATTRIBUTE_TYPE = record
  1363.     Location: LPCSTR;
  1364.   end;
  1365.   {$EXTERNALSYM GOPHER_LOCATION_ATTRIBUTE_TYPE}
  1366.   TGopherLocationAttributeType = GOPHER_LOCATION_ATTRIBUTE_TYPE;
  1367.   LPGOPHER_LOCATION_ATTRIBUTE_TYPE = PGopherLocationAttributeType;
  1368.   {$EXTERNALSYM LPGOPHER_LOCATION_ATTRIBUTE_TYPE}
  1369.  
  1370.   PGopherGeographicalLocationAttributeType = ^GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE;
  1371.   GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE = record
  1372.     DegreesNorth: Integer;
  1373.     MinutesNorth: Integer;
  1374.     SecondsNorth: Integer;
  1375.     DegreesEast: Integer;
  1376.     MinutesEast: Integer;
  1377.     SecondsEast: Integer;
  1378.   end;
  1379.   {$EXTERNALSYM GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE}
  1380.   TGopherGeographicalLocationAttributeType = GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE;
  1381.   LPGOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE = PGopherGeographicalLocationAttributeType;
  1382.   {$EXTERNALSYM LPGOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE}
  1383.  
  1384.   PGopherTimezoneAttributeType = ^TGopherTimezoneAttributeType;
  1385.   GOPHER_TIMEZONE_ATTRIBUTE_TYPE = record
  1386.     Zone: Integer;
  1387.   end;
  1388.   {$EXTERNALSYM GOPHER_TIMEZONE_ATTRIBUTE_TYPE}
  1389.   TGopherTimezoneAttributeType = GOPHER_TIMEZONE_ATTRIBUTE_TYPE;
  1390.   LPGOPHER_TIMEZONE_ATTRIBUTE_TYPE = PGopherTimezoneAttributeType;
  1391.   {$EXTERNALSYM LPGOPHER_TIMEZONE_ATTRIBUTE_TYPE}
  1392.  
  1393.   PGopherProviderAttributeType = ^GOPHER_PROVIDER_ATTRIBUTE_TYPE;
  1394.   GOPHER_PROVIDER_ATTRIBUTE_TYPE = record
  1395.     Provider: LPCSTR;
  1396.   end;
  1397.   {$EXTERNALSYM GOPHER_PROVIDER_ATTRIBUTE_TYPE}
  1398.   TGopherProviderAttributeType = GOPHER_PROVIDER_ATTRIBUTE_TYPE;
  1399.   LPGOPHER_PROVIDER_ATTRIBUTE_TYPE = PGopherProviderAttributeType;
  1400.   {$EXTERNALSYM LPGOPHER_PROVIDER_ATTRIBUTE_TYPE}
  1401.  
  1402.   PGopherVersionAttributeType = ^GOPHER_VERSION_ATTRIBUTE_TYPE;
  1403.   GOPHER_VERSION_ATTRIBUTE_TYPE = record
  1404.     Version: LPCSTR;
  1405.   end;
  1406.   {$EXTERNALSYM GOPHER_VERSION_ATTRIBUTE_TYPE}
  1407.   TGopherVersionAttributeType = GOPHER_VERSION_ATTRIBUTE_TYPE;
  1408.   LPGOPHER_VERSION_ATTRIBUTE_TYPE = PGopherVersionAttributeType;
  1409.   {$EXTERNALSYM LPGOPHER_VERSION_ATTRIBUTE_TYPE}
  1410.  
  1411.   PGopherAbstractAttributeType = ^GOPHER_ABSTRACT_ATTRIBUTE_TYPE;
  1412.   GOPHER_ABSTRACT_ATTRIBUTE_TYPE = record
  1413.     ShortAbstract: LPCSTR;
  1414.     AbstractFile: LPCSTR;
  1415.   end;
  1416.   {$EXTERNALSYM GOPHER_ABSTRACT_ATTRIBUTE_TYPE}
  1417.   TGopherAbstractAttributeType = GOPHER_ABSTRACT_ATTRIBUTE_TYPE;
  1418.   LPGOPHER_ABSTRACT_ATTRIBUTE_TYPE = PGopherAbstractAttributeType;
  1419.   {$EXTERNALSYM LPGOPHER_ABSTRACT_ATTRIBUTE_TYPE}
  1420.  
  1421.   PGopherViewAttributeType = ^GOPHER_VIEW_ATTRIBUTE_TYPE;
  1422.   GOPHER_VIEW_ATTRIBUTE_TYPE = record
  1423.     ContentType: LPCSTR;
  1424.     Language: LPCSTR;
  1425.     Size: DWORD;
  1426.   end;
  1427.   {$EXTERNALSYM GOPHER_VIEW_ATTRIBUTE_TYPE}
  1428.   TGopherViewAttributeType = GOPHER_VIEW_ATTRIBUTE_TYPE;
  1429.   LPGOPHER_VIEW_ATTRIBUTE_TYPE = PGopherViewAttributeType;
  1430.   {$EXTERNALSYM LPGOPHER_VIEW_ATTRIBUTE_TYPE}
  1431.  
  1432.   PGopherVeronicaAttributeType = ^GOPHER_VERONICA_ATTRIBUTE_TYPE;
  1433.   GOPHER_VERONICA_ATTRIBUTE_TYPE = record
  1434.     TreeWalk: BOOL;
  1435.   end;
  1436.   {$EXTERNALSYM GOPHER_VERONICA_ATTRIBUTE_TYPE}
  1437.   TGopherVeronicaAttributeType = GOPHER_VERONICA_ATTRIBUTE_TYPE;
  1438.   LPGOPHER_VERONICA_ATTRIBUTE_TYPE = PGopherVeronicaAttributeType;
  1439.   {$EXTERNALSYM LPGOPHER_VERONICA_ATTRIBUTE_TYPE}
  1440.  
  1441.   PGopherAskAttributeType = ^GOPHER_ASK_ATTRIBUTE_TYPE;
  1442.   GOPHER_ASK_ATTRIBUTE_TYPE = record
  1443.     QuestionType: LPCSTR;
  1444.     QuestionText: LPCSTR;
  1445.   end;
  1446.   {$EXTERNALSYM GOPHER_ASK_ATTRIBUTE_TYPE}
  1447.   TGopherAskAttributeType = GOPHER_ASK_ATTRIBUTE_TYPE;
  1448.   LPGOPHER_ASK_ATTRIBUTE_TYPE = PGopherAskAttributeType;
  1449.   {$EXTERNALSYM LPGOPHER_ASK_ATTRIBUTE_TYPE}
  1450.  
  1451. { GOPHER_UNKNOWN_ATTRIBUTE_TYPE - this is returned if we retrieve an attribute }
  1452. { that is not specified in the current gopher/gopher+ documentation. It is up }
  1453. { to the application to parse the information }
  1454.  
  1455.   PGopherUnknownAttributeType = ^GOPHER_UNKNOWN_ATTRIBUTE_TYPE;
  1456.   GOPHER_UNKNOWN_ATTRIBUTE_TYPE = record
  1457.     Text: LPCSTR;
  1458.   end;
  1459.   {$EXTERNALSYM GOPHER_UNKNOWN_ATTRIBUTE_TYPE}
  1460.   TGopherUnknownAttributeType = GOPHER_UNKNOWN_ATTRIBUTE_TYPE;
  1461.   LPGOPHER_UNKNOWN_ATTRIBUTE_TYPE = PGopherUnknownAttributeType;
  1462.   {$EXTERNALSYM LPGOPHER_UNKNOWN_ATTRIBUTE_TYPE}
  1463.  
  1464. { GOPHER_ATTRIBUTE_TYPE - returned in the user's buffer when an enumerated }
  1465. { GopherGetAttribute call is made }
  1466.  
  1467.   PGopherAttributeType = ^GOPHER_ATTRIBUTE_TYPE;
  1468.   GOPHER_ATTRIBUTE_TYPE = record
  1469.     CategoryId: DWORD;  { e.g. GOPHER_CATEGORY_ID_ADMIN }
  1470.     AttributeId: DWORD; { e.g. GOPHER_ATTRIBUTE_ID_ADMIN }
  1471.     case Integer of
  1472.       0: (Admin: TGopherAdminAttributeType);
  1473.       1: (ModDate: TGopherModDateAttributeType);
  1474.       2: (Ttl: TGopherTtlAttributeType);
  1475.       3: (Score: TGopherScoreAttributeType);
  1476.       4: (ScoreRange: TGopherScoreRangeAttributeType);
  1477.       5: (Site: TGopherSiteAttributeType);
  1478.       6: (Organization: TGopherOrganizationAttributeType);
  1479.       7: (Location: TGopherLocationAttributeType);
  1480.       8: (GeographicalLocation: TGopherGeographicalLocationAttributeType);
  1481.       9: (TimeZone: TGopherTimezoneAttributeType);
  1482.       10: (Provider: TGopherProviderAttributeType);
  1483.       11: (Version: TGopherVersionAttributeType);
  1484.       12: (AbstractType: TGopherAbstractAttributeType);
  1485.       13: (View: TGopherViewAttributeType);
  1486.       14: (Veronica: TGopherVeronicaAttributeType);
  1487.       15: (Ask: TGopherAskAttributeType);
  1488.       16: (Unknown: TGopherUnknownAttributeType);
  1489.     end;
  1490.   {$EXTERNALSYM GOPHER_ATTRIBUTE_TYPE}
  1491.   TGopherAttributeType = GOPHER_ATTRIBUTE_TYPE;
  1492.   LPGOPHER_ATTRIBUTE_TYPE = PGopherAttributeType;
  1493.   {$EXTERNALSYM LPGOPHER_ATTRIBUTE_TYPE}
  1494.  
  1495. const
  1496.   MAX_GOPHER_CATEGORY_NAME = 128;           { arbitrary }
  1497.   {$EXTERNALSYM MAX_GOPHER_CATEGORY_NAME}
  1498.   MAX_GOPHER_ATTRIBUTE_NAME = 128;          {     " }
  1499.   {$EXTERNALSYM MAX_GOPHER_ATTRIBUTE_NAME}
  1500.   MIN_GOPHER_ATTRIBUTE_LENGTH = 256;        {     " }
  1501.   {$EXTERNALSYM MIN_GOPHER_ATTRIBUTE_LENGTH}
  1502.  
  1503. { known gopher attribute categories. See below for ordinals }
  1504.  
  1505.   GOPHER_INFO_CATEGORY           = '+INFO';
  1506.   {$EXTERNALSYM GOPHER_INFO_CATEGORY}
  1507.   GOPHER_ADMIN_CATEGORY          = '+ADMIN';
  1508.   {$EXTERNALSYM GOPHER_ADMIN_CATEGORY}
  1509.   GOPHER_VIEWS_CATEGORY          = '+VIEWS';
  1510.   {$EXTERNALSYM GOPHER_VIEWS_CATEGORY}
  1511.   GOPHER_ABSTRACT_CATEGORY       = '+ABSTRACT';
  1512.   {$EXTERNALSYM GOPHER_ABSTRACT_CATEGORY}
  1513.   GOPHER_VERONICA_CATEGORY       = '+VERONICA';
  1514.   {$EXTERNALSYM GOPHER_VERONICA_CATEGORY}
  1515.  
  1516. { known gopher attributes. These are the attribute names as defined in the }
  1517. { gopher+ protocol document }
  1518.  
  1519.   GOPHER_ADMIN_ATTRIBUTE         = 'Admin';
  1520.   {$EXTERNALSYM GOPHER_ADMIN_ATTRIBUTE}
  1521.   GOPHER_MOD_DATE_ATTRIBUTE      = 'Mod-Date';
  1522.   {$EXTERNALSYM GOPHER_MOD_DATE_ATTRIBUTE}
  1523.   GOPHER_TTL_ATTRIBUTE           = 'TTL';
  1524.   {$EXTERNALSYM GOPHER_TTL_ATTRIBUTE}
  1525.   GOPHER_SCORE_ATTRIBUTE         = 'Score';
  1526.   {$EXTERNALSYM GOPHER_SCORE_ATTRIBUTE}
  1527.   GOPHER_RANGE_ATTRIBUTE         = 'Score-range';
  1528.   {$EXTERNALSYM GOPHER_RANGE_ATTRIBUTE}
  1529.   GOPHER_SITE_ATTRIBUTE          = 'Site';
  1530.   {$EXTERNALSYM GOPHER_SITE_ATTRIBUTE}
  1531.   GOPHER_ORG_ATTRIBUTE           = 'Org';
  1532.   {$EXTERNALSYM GOPHER_ORG_ATTRIBUTE}
  1533.   GOPHER_LOCATION_ATTRIBUTE      = 'Loc';
  1534.   {$EXTERNALSYM GOPHER_LOCATION_ATTRIBUTE}
  1535.   GOPHER_GEOG_ATTRIBUTE          = 'Geog';
  1536.   {$EXTERNALSYM GOPHER_GEOG_ATTRIBUTE}
  1537.   GOPHER_TIMEZONE_ATTRIBUTE      = 'TZ';
  1538.   {$EXTERNALSYM GOPHER_TIMEZONE_ATTRIBUTE}
  1539.   GOPHER_PROVIDER_ATTRIBUTE      = 'Provider';
  1540.   {$EXTERNALSYM GOPHER_PROVIDER_ATTRIBUTE}
  1541.   GOPHER_VERSION_ATTRIBUTE       = 'Version';
  1542.   {$EXTERNALSYM GOPHER_VERSION_ATTRIBUTE}
  1543.   GOPHER_ABSTRACT_ATTRIBUTE      = 'Abstract';
  1544.   {$EXTERNALSYM GOPHER_ABSTRACT_ATTRIBUTE}
  1545.   GOPHER_VIEW_ATTRIBUTE          = 'View';
  1546.   {$EXTERNALSYM GOPHER_VIEW_ATTRIBUTE}
  1547.   GOPHER_TREEWALK_ATTRIBUTE      = 'treewalk';
  1548.   {$EXTERNALSYM GOPHER_TREEWALK_ATTRIBUTE}
  1549.  
  1550. { identifiers for attribute strings }
  1551.  
  1552.   GOPHER_ATTRIBUTE_ID_BASE = $abcccc00;
  1553.   {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_BASE}
  1554.   GOPHER_CATEGORY_ID_ALL = GOPHER_ATTRIBUTE_ID_BASE + 1;
  1555.   {$EXTERNALSYM GOPHER_CATEGORY_ID_ALL}
  1556.   GOPHER_CATEGORY_ID_INFO = GOPHER_ATTRIBUTE_ID_BASE + 2;
  1557.   {$EXTERNALSYM GOPHER_CATEGORY_ID_INFO}
  1558.   GOPHER_CATEGORY_ID_ADMIN = GOPHER_ATTRIBUTE_ID_BASE + 3;
  1559.   {$EXTERNALSYM GOPHER_CATEGORY_ID_ADMIN}
  1560.   GOPHER_CATEGORY_ID_VIEWS = GOPHER_ATTRIBUTE_ID_BASE + 4;
  1561.   {$EXTERNALSYM GOPHER_CATEGORY_ID_VIEWS}
  1562.   GOPHER_CATEGORY_ID_ABSTRACT = GOPHER_ATTRIBUTE_ID_BASE + 5;
  1563.   {$EXTERNALSYM GOPHER_CATEGORY_ID_ABSTRACT}
  1564.   GOPHER_CATEGORY_ID_VERONICA = GOPHER_ATTRIBUTE_ID_BASE + 6;
  1565.   {$EXTERNALSYM GOPHER_CATEGORY_ID_VERONICA}
  1566.   GOPHER_CATEGORY_ID_ASK = GOPHER_ATTRIBUTE_ID_BASE + 7;
  1567.   {$EXTERNALSYM GOPHER_CATEGORY_ID_ASK}
  1568.   GOPHER_CATEGORY_ID_UNKNOWN = GOPHER_ATTRIBUTE_ID_BASE + 8;
  1569.   {$EXTERNALSYM GOPHER_CATEGORY_ID_UNKNOWN}
  1570.   GOPHER_ATTRIBUTE_ID_ALL = GOPHER_ATTRIBUTE_ID_BASE + 9;
  1571.   {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_ALL}
  1572.   GOPHER_ATTRIBUTE_ID_ADMIN = GOPHER_ATTRIBUTE_ID_BASE + 10;
  1573.   {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_ADMIN}
  1574.   GOPHER_ATTRIBUTE_ID_MOD_DATE = GOPHER_ATTRIBUTE_ID_BASE + 11;
  1575.   {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_MOD_DATE}
  1576.   GOPHER_ATTRIBUTE_ID_TTL = GOPHER_ATTRIBUTE_ID_BASE + 12;
  1577.   {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_TTL}
  1578.   GOPHER_ATTRIBUTE_ID_SCORE = GOPHER_ATTRIBUTE_ID_BASE + 13;
  1579.   {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_SCORE}
  1580.   GOPHER_ATTRIBUTE_ID_RANGE = GOPHER_ATTRIBUTE_ID_BASE + 14;
  1581.   {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_RANGE}
  1582.   GOPHER_ATTRIBUTE_ID_SITE = GOPHER_ATTRIBUTE_ID_BASE + 15;
  1583.   {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_SITE}
  1584.   GOPHER_ATTRIBUTE_ID_ORG = GOPHER_ATTRIBUTE_ID_BASE + 16;
  1585.   {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_ORG}
  1586.   GOPHER_ATTRIBUTE_ID_LOCATION = GOPHER_ATTRIBUTE_ID_BASE + 17;
  1587.   {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_LOCATION}
  1588.   GOPHER_ATTRIBUTE_ID_GEOG = GOPHER_ATTRIBUTE_ID_BASE + 18;
  1589.   {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_GEOG}
  1590.   GOPHER_ATTRIBUTE_ID_TIMEZONE = GOPHER_ATTRIBUTE_ID_BASE + 19;
  1591.   {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_TIMEZONE}
  1592.   GOPHER_ATTRIBUTE_ID_PROVIDER = GOPHER_ATTRIBUTE_ID_BASE + 20;
  1593.   {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_PROVIDER}
  1594.   GOPHER_ATTRIBUTE_ID_VERSION = GOPHER_ATTRIBUTE_ID_BASE + 21;
  1595.   {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_VERSION}
  1596.   GOPHER_ATTRIBUTE_ID_ABSTRACT = GOPHER_ATTRIBUTE_ID_BASE + 22;
  1597.   {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_ABSTRACT}
  1598.   GOPHER_ATTRIBUTE_ID_VIEW = GOPHER_ATTRIBUTE_ID_BASE + 23;
  1599.   {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_VIEW}
  1600.   GOPHER_ATTRIBUTE_ID_TREEWALK = GOPHER_ATTRIBUTE_ID_BASE + 24;
  1601.   {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_TREEWALK}
  1602.   GOPHER_ATTRIBUTE_ID_UNKNOWN = GOPHER_ATTRIBUTE_ID_BASE + 25;
  1603.   {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_UNKNOWN}
  1604.   
  1605. { prototypes }
  1606.  
  1607. function GopherCreateLocator(lpszHost: PChar; nServerPort: INTERNET_PORT;
  1608.   lpszDisplayString: PChar; lpszSelectorString: PChar; dwGopherType: DWORD;
  1609.   lpszLocator: PChar; var lpdwBufferLength: DWORD): BOOL; stdcall;
  1610.   {$EXTERNALSYM GopherCreateLocator}
  1611. function GopherCreateLocatorA(lpszHost: PAnsiChar; nServerPort: INTERNET_PORT;
  1612.   lpszDisplayString: PAnsiChar; lpszSelectorString: PAnsiChar; dwGopherType: DWORD;
  1613.   lpszLocator: PAnsiChar; var lpdwBufferLength: DWORD): BOOL; stdcall;
  1614.   {$EXTERNALSYM GopherCreateLocatorA}
  1615. function GopherCreateLocatorW(lpszHost: PWideChar; nServerPort: INTERNET_PORT;
  1616.   lpszDisplayString: PWideChar; lpszSelectorString: PWideChar; dwGopherType: DWORD;
  1617.   lpszLocator: PWideChar; var lpdwBufferLength: DWORD): BOOL; stdcall;
  1618.   {$EXTERNALSYM GopherCreateLocatorW}
  1619.  
  1620. function GopherGetLocatorType(lpszLocator: PChar;
  1621.   var lpdwGopherType: DWORD): BOOL; stdcall;
  1622.   {$EXTERNALSYM GopherGetLocatorType}
  1623. function GopherGetLocatorTypeA(lpszLocator: PAnsiChar;
  1624.   var lpdwGopherType: DWORD): BOOL; stdcall;
  1625.   {$EXTERNALSYM GopherGetLocatorTypeA}
  1626. function GopherGetLocatorTypeW(lpszLocator: PWideChar;
  1627.   var lpdwGopherType: DWORD): BOOL; stdcall;
  1628.   {$EXTERNALSYM GopherGetLocatorTypeW}
  1629.  
  1630. function GopherFindFirstFile(hConnect: HINTERNET; lpszLocator: PChar;
  1631.   lpszSearchString: PChar; var lpFindData: TGopherFindData; dwFlags: DWORD;
  1632.   dwContext: DWORD): HINTERNET; stdcall;
  1633.   {$EXTERNALSYM GopherFindFirstFile}
  1634. function GopherFindFirstFileA(hConnect: HINTERNET; lpszLocator: PAnsiChar;
  1635.   lpszSearchString: PAnsiChar; var lpFindData: TGopherFindDataA; dwFlags: DWORD;
  1636.   dwContext: DWORD): HINTERNET; stdcall;
  1637.   {$EXTERNALSYM GopherFindFirstFileA}
  1638. function GopherFindFirstFileW(hConnect: HINTERNET; lpszLocator: PWideChar;
  1639.   lpszSearchString: PWideChar; var lpFindData: TGopherFindDataW; dwFlags: DWORD;
  1640.   dwContext: DWORD): HINTERNET; stdcall;
  1641.   {$EXTERNALSYM GopherFindFirstFileW}
  1642.  
  1643. function GopherOpenFile(hConnect: HINTERNET; lpszLocator: PChar;
  1644.   lpszView: PChar; dwFlags: DWORD; dwContext: DWORD): HINTERNET; stdcall;
  1645.   {$EXTERNALSYM GopherOpenFile}
  1646. function GopherOpenFileA(hConnect: HINTERNET; lpszLocator: PAnsiChar;
  1647.   lpszView: PAnsiChar; dwFlags: DWORD; dwContext: DWORD): HINTERNET; stdcall;
  1648.   {$EXTERNALSYM GopherOpenFileA}
  1649. function GopherOpenFileW(hConnect: HINTERNET; lpszLocator: PWideChar;
  1650.   lpszView: PWideChar; dwFlags: DWORD; dwContext: DWORD): HINTERNET; stdcall;
  1651.   {$EXTERNALSYM GopherOpenFileW}
  1652.  
  1653. type
  1654.  
  1655.  
  1656.  
  1657.  
  1658.   GOPHER_ATTRIBUTE_ENUMERATOR = TFarProc;
  1659.  
  1660.   {$EXTERNALSYM GOPHER_ATTRIBUTE_ENUMERATOR}
  1661.   TFNGopherAttributeEnumerator = GOPHER_ATTRIBUTE_ENUMERATOR;
  1662.   PFNGopherAttributeEnumerator = ^TFNGopherAttributeEnumerator;
  1663.  
  1664. function GopherGetAttribute(hConnect: HINTERNET; lpszLocator: PChar;
  1665.   lpszAttributeName: PChar; lpBuffer: Pointer; dwBufferLength: DWORD;
  1666.   var lpdwCharactersReturned: DWORD; lpfnEnumerator: PFNGopherAttributeEnumerator;
  1667.   dwContext: DWORD): BOOL; stdcall;
  1668.   {$EXTERNALSYM GopherGetAttribute}
  1669. function GopherGetAttributeA(hConnect: HINTERNET; lpszLocator: PAnsiChar;
  1670.   lpszAttributeName: PAnsiChar; lpBuffer: Pointer; dwBufferLength: DWORD;
  1671.   var lpdwCharactersReturned: DWORD; lpfnEnumerator: PFNGopherAttributeEnumerator;
  1672.   dwContext: DWORD): BOOL; stdcall;
  1673.   {$EXTERNALSYM GopherGetAttributeA}
  1674. function GopherGetAttributeW(hConnect: HINTERNET; lpszLocator: PWideChar;
  1675.   lpszAttributeName: PWideChar; lpBuffer: Pointer; dwBufferLength: DWORD;
  1676.   var lpdwCharactersReturned: DWORD; lpfnEnumerator: PFNGopherAttributeEnumerator;
  1677.   dwContext: DWORD): BOOL; stdcall;
  1678.   {$EXTERNALSYM GopherGetAttributeW}
  1679.  
  1680. { HTTP }
  1681.  
  1682. { manifests }
  1683.  
  1684. const
  1685. { the default major/minor HTTP version numbers }
  1686.  
  1687.   HTTP_MAJOR_VERSION = 1;
  1688.   {$EXTERNALSYM HTTP_MAJOR_VERSION}
  1689.   HTTP_MINOR_VERSION = 0;
  1690.   {$EXTERNALSYM HTTP_MINOR_VERSION}
  1691.   HTTP_VERSION       = 'HTTP/1.0';
  1692.   {$EXTERNALSYM HTTP_VERSION}
  1693.  
  1694. { HttpQueryInfo info levels. Generally, there is one info level }
  1695. { for each potential RFC822/HTTP/MIME header that an HTTP server }
  1696. { may send as part of a request response. }
  1697.  
  1698. { The HTTP_QUERY_RAW_HEADERS info level is provided for clients }
  1699. { that choose to perform their own header parsing. }
  1700.  
  1701.   HTTP_QUERY_MIME_VERSION                     = 0;
  1702.   {$EXTERNALSYM HTTP_QUERY_MIME_VERSION}
  1703.   HTTP_QUERY_CONTENT_TYPE                     = 1;
  1704.   {$EXTERNALSYM HTTP_QUERY_CONTENT_TYPE}
  1705.   HTTP_QUERY_CONTENT_TRANSFER_ENCODING        = 2;
  1706.   {$EXTERNALSYM HTTP_QUERY_CONTENT_TRANSFER_ENCODING}
  1707.   HTTP_QUERY_CONTENT_ID                       = 3;
  1708.   {$EXTERNALSYM HTTP_QUERY_CONTENT_ID}
  1709.   HTTP_QUERY_CONTENT_DESCRIPTION              = 4;
  1710.   {$EXTERNALSYM HTTP_QUERY_CONTENT_DESCRIPTION}
  1711.   HTTP_QUERY_CONTENT_LENGTH                   = 5;
  1712.   {$EXTERNALSYM HTTP_QUERY_CONTENT_LENGTH}
  1713.   HTTP_QUERY_CONTENT_LANGUAGE                 = 6;
  1714.   {$EXTERNALSYM HTTP_QUERY_CONTENT_LANGUAGE}
  1715.   HTTP_QUERY_ALLOW                            = 7;
  1716.   {$EXTERNALSYM HTTP_QUERY_ALLOW}
  1717.   HTTP_QUERY_PUBLIC                           = 8;
  1718.   {$EXTERNALSYM HTTP_QUERY_PUBLIC}
  1719.   HTTP_QUERY_DATE                             = 9;
  1720.   {$EXTERNALSYM HTTP_QUERY_DATE}
  1721.   HTTP_QUERY_EXPIRES                          = 10;
  1722.   {$EXTERNALSYM HTTP_QUERY_EXPIRES}
  1723.   HTTP_QUERY_LAST_MODIFIED                    = 11;
  1724.   {$EXTERNALSYM HTTP_QUERY_LAST_MODIFIED}
  1725.   HTTP_QUERY_MESSAGE_ID                       = 12;
  1726.   {$EXTERNALSYM HTTP_QUERY_MESSAGE_ID}
  1727.   HTTP_QUERY_URI                              = 13;
  1728.   {$EXTERNALSYM HTTP_QUERY_URI}
  1729.   HTTP_QUERY_DERIVED_FROM                     = 14;
  1730.   {$EXTERNALSYM HTTP_QUERY_DERIVED_FROM}
  1731.   HTTP_QUERY_COST                             = 15;
  1732.   {$EXTERNALSYM HTTP_QUERY_COST}
  1733.   HTTP_QUERY_LINK                             = 16;
  1734.   {$EXTERNALSYM HTTP_QUERY_LINK}
  1735.   HTTP_QUERY_PRAGMA                           = 17;
  1736.   {$EXTERNALSYM HTTP_QUERY_PRAGMA}
  1737.   HTTP_QUERY_VERSION                          = 18; { special: part of status line }
  1738.   {$EXTERNALSYM HTTP_QUERY_VERSION}
  1739.   HTTP_QUERY_STATUS_CODE                      = 19; { special: part of status line }
  1740.   {$EXTERNALSYM HTTP_QUERY_STATUS_CODE}
  1741.   HTTP_QUERY_STATUS_TEXT                      = 20; { special: part of status line }
  1742.   {$EXTERNALSYM HTTP_QUERY_STATUS_TEXT}
  1743.   HTTP_QUERY_RAW_HEADERS                      = 21; { special: all headers as ASCIIZ }
  1744.   {$EXTERNALSYM HTTP_QUERY_RAW_HEADERS}
  1745.   HTTP_QUERY_RAW_HEADERS_CRLF                 = 22; { special: all headers }
  1746.   {$EXTERNALSYM HTTP_QUERY_RAW_HEADERS_CRLF}
  1747.   HTTP_QUERY_CONNECTION                       = 23;
  1748.   {$EXTERNALSYM HTTP_QUERY_CONNECTION}
  1749.   HTTP_QUERY_ACCEPT                           = 24;
  1750.   {$EXTERNALSYM HTTP_QUERY_ACCEPT}
  1751.   HTTP_QUERY_ACCEPT_CHARSET                   = 25;
  1752.   {$EXTERNALSYM HTTP_QUERY_ACCEPT_CHARSET}
  1753.   HTTP_QUERY_ACCEPT_ENCODING                  = 26;
  1754.   {$EXTERNALSYM HTTP_QUERY_ACCEPT_ENCODING}
  1755.   HTTP_QUERY_ACCEPT_LANGUAGE                  = 27;
  1756.   {$EXTERNALSYM HTTP_QUERY_ACCEPT_LANGUAGE}
  1757.   HTTP_QUERY_AUTHORIZATION                    = 28;
  1758.   {$EXTERNALSYM HTTP_QUERY_AUTHORIZATION}
  1759.   HTTP_QUERY_CONTENT_ENCODING                 = 29;
  1760.   {$EXTERNALSYM HTTP_QUERY_CONTENT_ENCODING}
  1761.   HTTP_QUERY_FORWARDED                        = 30;
  1762.   {$EXTERNALSYM HTTP_QUERY_FORWARDED}
  1763.   HTTP_QUERY_FROM                             = 31;
  1764.   {$EXTERNALSYM HTTP_QUERY_FROM}
  1765.   HTTP_QUERY_IF_MODIFIED_SINCE                = 32;
  1766.   {$EXTERNALSYM HTTP_QUERY_IF_MODIFIED_SINCE}
  1767.   HTTP_QUERY_LOCATION                         = 33;
  1768.   {$EXTERNALSYM HTTP_QUERY_LOCATION}
  1769.   HTTP_QUERY_ORIG_URI                         = 34;
  1770.   {$EXTERNALSYM HTTP_QUERY_ORIG_URI}
  1771.   HTTP_QUERY_REFERER                          = 35;
  1772.   {$EXTERNALSYM HTTP_QUERY_REFERER}
  1773.   HTTP_QUERY_RETRY_AFTER                      = 36;
  1774.   {$EXTERNALSYM HTTP_QUERY_RETRY_AFTER}
  1775.   HTTP_QUERY_SERVER                           = 37;
  1776.   {$EXTERNALSYM HTTP_QUERY_SERVER}
  1777.   HTTP_QUERY_TITLE                            = 38;
  1778.   {$EXTERNALSYM HTTP_QUERY_TITLE}
  1779.   HTTP_QUERY_USER_AGENT                       = 39;
  1780.   {$EXTERNALSYM HTTP_QUERY_USER_AGENT}
  1781.   HTTP_QUERY_WWW_AUTHENTICATE                 = 40;
  1782.   {$EXTERNALSYM HTTP_QUERY_WWW_AUTHENTICATE}
  1783.   HTTP_QUERY_PROXY_AUTHENTICATE               = 41;
  1784.   {$EXTERNALSYM HTTP_QUERY_PROXY_AUTHENTICATE}
  1785.   HTTP_QUERY_ACCEPT_RANGES                    = 42;
  1786.   {$EXTERNALSYM HTTP_QUERY_ACCEPT_RANGES}
  1787.   HTTP_QUERY_SET_COOKIE                       = 43;
  1788.   {$EXTERNALSYM HTTP_QUERY_SET_COOKIE}
  1789.   HTTP_QUERY_COOKIE                           = 44;
  1790.   {$EXTERNALSYM HTTP_QUERY_COOKIE}
  1791.   HTTP_QUERY_REQUEST_METHOD                   = 45;  { special: GET/POST etc. }
  1792.   {$EXTERNALSYM HTTP_QUERY_REQUEST_METHOD}
  1793.   HTTP_QUERY_REFRESH                          = 46;
  1794.   {$EXTERNALSYM HTTP_QUERY_REFRESH}
  1795.   HTTP_QUERY_CONTENT_DISPOSITION              = 47;
  1796.   {$EXTERNALSYM HTTP_QUERY_CONTENT_DISPOSITION}
  1797.  
  1798. { HTTP 1.1 defined headers }
  1799.  
  1800.   HTTP_QUERY_AGE                              = 48;
  1801.   {$EXTERNALSYM HTTP_QUERY_AGE}
  1802.   HTTP_QUERY_CACHE_CONTROL                    = 49;
  1803.   {$EXTERNALSYM HTTP_QUERY_CACHE_CONTROL}
  1804.   HTTP_QUERY_CONTENT_BASE                     = 50;
  1805.   {$EXTERNALSYM HTTP_QUERY_CONTENT_BASE}
  1806.   HTTP_QUERY_CONTENT_LOCATION                 = 51;
  1807.   {$EXTERNALSYM HTTP_QUERY_CONTENT_LOCATION}
  1808.   HTTP_QUERY_CONTENT_MD5                      = 52;
  1809.   {$EXTERNALSYM HTTP_QUERY_CONTENT_MD5}
  1810.   HTTP_QUERY_CONTENT_RANGE                    = 53;
  1811.   {$EXTERNALSYM HTTP_QUERY_CONTENT_RANGE}
  1812.   HTTP_QUERY_ETAG                             = 54;
  1813.   {$EXTERNALSYM HTTP_QUERY_ETAG}
  1814.   HTTP_QUERY_HOST                             = 55;
  1815.   {$EXTERNALSYM HTTP_QUERY_HOST}
  1816.   HTTP_QUERY_IF_MATCH                         = 56;
  1817.   {$EXTERNALSYM HTTP_QUERY_IF_MATCH}
  1818.   HTTP_QUERY_IF_NONE_MATCH                    = 57;
  1819.   {$EXTERNALSYM HTTP_QUERY_IF_NONE_MATCH}
  1820.   HTTP_QUERY_IF_RANGE                         = 58;
  1821.   {$EXTERNALSYM HTTP_QUERY_IF_RANGE}
  1822.   HTTP_QUERY_IF_UNMODIFIED_SINCE              = 59;
  1823.   {$EXTERNALSYM HTTP_QUERY_IF_UNMODIFIED_SINCE}
  1824.   HTTP_QUERY_MAX_FORWARDS                     = 60;
  1825.   {$EXTERNALSYM HTTP_QUERY_MAX_FORWARDS}
  1826.   HTTP_QUERY_PROXY_AUTHORIZATION              = 61;
  1827.   {$EXTERNALSYM HTTP_QUERY_PROXY_AUTHORIZATION}
  1828.   HTTP_QUERY_RANGE                            = 62;
  1829.   {$EXTERNALSYM HTTP_QUERY_RANGE}
  1830.   HTTP_QUERY_TRANSFER_ENCODING                = 63;
  1831.   {$EXTERNALSYM HTTP_QUERY_TRANSFER_ENCODING}
  1832.   HTTP_QUERY_UPGRADE                          = 64;
  1833.   {$EXTERNALSYM HTTP_QUERY_UPGRADE}
  1834.   HTTP_QUERY_VARY                             = 65;
  1835.   {$EXTERNALSYM HTTP_QUERY_VARY}
  1836.   HTTP_QUERY_VIA                              = 66;
  1837.   {$EXTERNALSYM HTTP_QUERY_VIA}
  1838.   HTTP_QUERY_WARNING                          = 67;
  1839.   {$EXTERNALSYM HTTP_QUERY_WARNING}
  1840.   HTTP_QUERY_MAX                              = 67;
  1841.   {$EXTERNALSYM HTTP_QUERY_MAX}
  1842.  
  1843. { HTTP_QUERY_CUSTOM - if this special value is supplied as the dwInfoLevel }
  1844. { parameter of HttpQueryInfo then the lpBuffer parameter contains the name }
  1845. { of the header we are to query }
  1846.   HTTP_QUERY_CUSTOM                           = 65535;
  1847.   {$EXTERNALSYM HTTP_QUERY_CUSTOM}
  1848.  
  1849. { HTTP_QUERY_FLAG_REQUEST_HEADERS - if this bit is set in the dwInfoLevel }
  1850. { parameter of HttpQueryInfo then the request headers will be queried for the }
  1851. { request information }
  1852.   HTTP_QUERY_FLAG_REQUEST_HEADERS             = $80000000;
  1853.   {$EXTERNALSYM HTTP_QUERY_FLAG_REQUEST_HEADERS}
  1854.  
  1855. { HTTP_QUERY_FLAG_SYSTEMTIME - if this bit is set in the dwInfoLevel parameter }
  1856. { of HttpQueryInfo AND the header being queried contains date information, }
  1857. { e.g. the "Expires:" header then lpBuffer will contain a SYSTEMTIME structure }
  1858. { containing the date and time information converted from the header string }
  1859.   HTTP_QUERY_FLAG_SYSTEMTIME                  = $40000000;
  1860.   {$EXTERNALSYM HTTP_QUERY_FLAG_SYSTEMTIME}
  1861.  
  1862. { HTTP_QUERY_FLAG_NUMBER - if this bit is set in the dwInfoLevel parameter of }
  1863. { HttpQueryInfo, then the value of the header will be converted to a number }
  1864. { before being returned to the caller, if applicable }
  1865.   HTTP_QUERY_FLAG_NUMBER                      = $20000000;
  1866.   {$EXTERNALSYM HTTP_QUERY_FLAG_NUMBER}
  1867.  
  1868. { HTTP_QUERY_FLAG_COALESCE - combine the values from several headers of the }
  1869. { same name into the output buffer }
  1870.   HTTP_QUERY_FLAG_COALESCE                    = $10000000;
  1871.   {$EXTERNALSYM HTTP_QUERY_FLAG_COALESCE}
  1872.  
  1873.   HTTP_QUERY_MODIFIER_FLAGS_MASK              = HTTP_QUERY_FLAG_REQUEST_HEADERS or
  1874.                                                 HTTP_QUERY_FLAG_SYSTEMTIME or
  1875.                                                 HTTP_QUERY_FLAG_NUMBER or
  1876.                                                 HTTP_QUERY_FLAG_COALESCE;
  1877.   {$EXTERNALSYM HTTP_QUERY_MODIFIER_FLAGS_MASK}
  1878.  
  1879.   HTTP_QUERY_HEADER_MASK                      = not HTTP_QUERY_MODIFIER_FLAGS_MASK;
  1880.   {$EXTERNALSYM HTTP_QUERY_HEADER_MASK}
  1881.  
  1882. {  HTTP Response Status Codes: }
  1883.   HTTP_STATUS_CONTINUE            = 100;    { OK to continue with request }
  1884.   {$EXTERNALSYM HTTP_STATUS_CONTINUE}
  1885.   HTTP_STATUS_SWITCH_PROTOCOLS    = 101;    { server has switched protocols in upgrade header }
  1886.   {$EXTERNALSYM HTTP_STATUS_SWITCH_PROTOCOLS}
  1887.   HTTP_STATUS_OK                  = 200;    { request completed }
  1888.   {$EXTERNALSYM HTTP_STATUS_OK}
  1889.   HTTP_STATUS_CREATED             = 201;    { object created, reason = new URI }
  1890.   {$EXTERNALSYM HTTP_STATUS_CREATED}
  1891.   HTTP_STATUS_ACCEPTED            = 202;    { async completion (TBS) }
  1892.   {$EXTERNALSYM HTTP_STATUS_ACCEPTED}
  1893.   HTTP_STATUS_PARTIAL             = 203;    { partial completion }
  1894.   {$EXTERNALSYM HTTP_STATUS_PARTIAL}
  1895.   HTTP_STATUS_NO_CONTENT          = 204;    { no info to return }
  1896.   {$EXTERNALSYM HTTP_STATUS_NO_CONTENT}
  1897.   HTTP_STATUS_RESET_CONTENT       = 205;    { request completed, but clear form }
  1898.   {$EXTERNALSYM HTTP_STATUS_RESET_CONTENT}
  1899.   HTTP_STATUS_PARTIAL_CONTENT     = 206;    { partial GET furfilled }
  1900.   {$EXTERNALSYM HTTP_STATUS_PARTIAL_CONTENT}
  1901.   HTTP_STATUS_AMBIGUOUS           = 300;    { server couldn't decide what to return }
  1902.   {$EXTERNALSYM HTTP_STATUS_AMBIGUOUS}
  1903.   HTTP_STATUS_MOVED               = 301;    { object permanently moved }
  1904.   {$EXTERNALSYM HTTP_STATUS_MOVED}
  1905.   HTTP_STATUS_REDIRECT            = 302;    { object temporarily moved }
  1906.   {$EXTERNALSYM HTTP_STATUS_REDIRECT}
  1907.   HTTP_STATUS_REDIRECT_METHOD     = 303;    { redirection w/ new access method }
  1908.   {$EXTERNALSYM HTTP_STATUS_REDIRECT_METHOD}
  1909.   HTTP_STATUS_NOT_MODIFIED        = 304;    { if-modified-since was not modified }
  1910.   {$EXTERNALSYM HTTP_STATUS_NOT_MODIFIED}
  1911.   HTTP_STATUS_USE_PROXY           = 305;    { redirection to proxy, location header specifies proxy to use }
  1912.   {$EXTERNALSYM HTTP_STATUS_USE_PROXY}
  1913.   HTTP_STATUS_REDIRECT_KEEP_VERB  = 307;    { HTTP/1.1: keep same verb }
  1914.   {$EXTERNALSYM HTTP_STATUS_REDIRECT_KEEP_VERB}
  1915.   HTTP_STATUS_BAD_REQUEST         = 400;    { invalid syntax }
  1916.   {$EXTERNALSYM HTTP_STATUS_BAD_REQUEST}
  1917.   HTTP_STATUS_DENIED              = 401;    { access denied }
  1918.   {$EXTERNALSYM HTTP_STATUS_DENIED}
  1919.   HTTP_STATUS_PAYMENT_REQ         = 402;    { payment required }
  1920.   {$EXTERNALSYM HTTP_STATUS_PAYMENT_REQ}
  1921.   HTTP_STATUS_FORBIDDEN           = 403;    { request forbidden }
  1922.   {$EXTERNALSYM HTTP_STATUS_FORBIDDEN}
  1923.   HTTP_STATUS_NOT_FOUND           = 404;    { object not found }
  1924.   {$EXTERNALSYM HTTP_STATUS_NOT_FOUND}
  1925.   HTTP_STATUS_BAD_METHOD          = 405;    { method is not allowed }
  1926.   {$EXTERNALSYM HTTP_STATUS_BAD_METHOD}
  1927.   HTTP_STATUS_NONE_ACCEPTABLE     = 406;    { no response acceptable to client found }
  1928.   {$EXTERNALSYM HTTP_STATUS_NONE_ACCEPTABLE}
  1929.   HTTP_STATUS_PROXY_AUTH_REQ      = 407;    { proxy authentication required }
  1930.   {$EXTERNALSYM HTTP_STATUS_PROXY_AUTH_REQ}
  1931.   HTTP_STATUS_REQUEST_TIMEOUT     = 408;    { server timed out waiting for request }
  1932.   {$EXTERNALSYM HTTP_STATUS_REQUEST_TIMEOUT}
  1933.   HTTP_STATUS_CONFLICT            = 409;    { user should resubmit with more info }
  1934.   {$EXTERNALSYM HTTP_STATUS_CONFLICT}
  1935.   HTTP_STATUS_GONE                = 410;    { the resource is no longer available }
  1936.   {$EXTERNALSYM HTTP_STATUS_GONE}
  1937.   HTTP_STATUS_AUTH_REFUSED        = 411;    { couldn't authorize client }
  1938.   {$EXTERNALSYM HTTP_STATUS_AUTH_REFUSED}
  1939.   HTTP_STATUS_PRECOND_FAILED      = 412;    { precondition given in request failed }
  1940.   {$EXTERNALSYM HTTP_STATUS_PRECOND_FAILED}
  1941.   HTTP_STATUS_REQUEST_TOO_LARGE   = 413;    { request entity was too large }
  1942.   {$EXTERNALSYM HTTP_STATUS_REQUEST_TOO_LARGE}
  1943.   HTTP_STATUS_URI_TOO_LONG        = 414;    { request URI too long }
  1944.   {$EXTERNALSYM HTTP_STATUS_URI_TOO_LONG}
  1945.   HTTP_STATUS_UNSUPPORTED_MEDIA   = 415;    { unsupported media type }
  1946.   {$EXTERNALSYM HTTP_STATUS_UNSUPPORTED_MEDIA}
  1947.   HTTP_STATUS_SERVER_ERROR        = 500;    { internal server error }
  1948.   {$EXTERNALSYM HTTP_STATUS_SERVER_ERROR}
  1949.   HTTP_STATUS_NOT_SUPPORTED       = 501;    { required not supported }
  1950.   {$EXTERNALSYM HTTP_STATUS_NOT_SUPPORTED}
  1951.   HTTP_STATUS_BAD_GATEWAY         = 502;    { error response received from gateway }
  1952.   {$EXTERNALSYM HTTP_STATUS_BAD_GATEWAY}
  1953.   HTTP_STATUS_SERVICE_UNAVAIL     = 503;    { temporarily overloaded }
  1954.   {$EXTERNALSYM HTTP_STATUS_SERVICE_UNAVAIL}
  1955.   HTTP_STATUS_GATEWAY_TIMEOUT     = 504;    { timed out waiting for gateway }
  1956.   {$EXTERNALSYM HTTP_STATUS_GATEWAY_TIMEOUT}
  1957.   HTTP_STATUS_VERSION_NOT_SUP     = 505;    { HTTP version not supported }
  1958.   {$EXTERNALSYM HTTP_STATUS_VERSION_NOT_SUP}
  1959.   HTTP_STATUS_FIRST               = HTTP_STATUS_CONTINUE;
  1960.   {$EXTERNALSYM HTTP_STATUS_FIRST}
  1961.   HTTP_STATUS_LAST                = HTTP_STATUS_VERSION_NOT_SUP;
  1962.   {$EXTERNALSYM HTTP_STATUS_LAST}
  1963.  
  1964. { prototypes }
  1965.  
  1966. function HttpOpenRequest(hConnect: HINTERNET; lpszVerb: PChar;
  1967.   lpszObjectName: PChar; lpszVersion: PChar; lpszReferrer: PChar;
  1968.   lplpszAcceptTypes: PLPSTR; dwFlags: DWORD;
  1969.   dwContext: DWORD): HINTERNET; stdcall;
  1970.   {$EXTERNALSYM HttpOpenRequest}
  1971. function HttpOpenRequestA(hConnect: HINTERNET; lpszVerb: PAnsiChar;
  1972.   lpszObjectName: PAnsiChar; lpszVersion: PAnsiChar; lpszReferrer: PAnsiChar;
  1973.   lplpszAcceptTypes: PLPSTR; dwFlags: DWORD;
  1974.   dwContext: DWORD): HINTERNET; stdcall;
  1975.   {$EXTERNALSYM HttpOpenRequestA}
  1976. function HttpOpenRequestW(hConnect: HINTERNET; lpszVerb: PWideChar;
  1977.   lpszObjectName: PWideChar; lpszVersion: PWideChar; lpszReferrer: PWideChar;
  1978.   lplpszAcceptTypes: PLPWSTR; dwFlags: DWORD;
  1979.   dwContext: DWORD): HINTERNET; stdcall;
  1980.   {$EXTERNALSYM HttpOpenRequestW}
  1981.  
  1982. function HttpAddRequestHeaders(hRequest: HINTERNET; lpszHeaders: PChar;
  1983.   dwHeadersLength: DWORD; dwModifiers: DWORD): BOOL; stdcall;
  1984.   {$EXTERNALSYM HttpAddRequestHeaders}
  1985. function HttpAddRequestHeadersA(hRequest: HINTERNET; lpszHeaders: PAnsiChar;
  1986.   dwHeadersLength: DWORD; dwModifiers: DWORD): BOOL; stdcall;
  1987.   {$EXTERNALSYM HttpAddRequestHeadersA}
  1988. function HttpAddRequestHeadersW(hRequest: HINTERNET; lpszHeaders: PWideChar;
  1989.   dwHeadersLength: DWORD; dwModifiers: DWORD): BOOL; stdcall;
  1990.   {$EXTERNALSYM HttpAddRequestHeadersW}
  1991.  
  1992. const
  1993. { values for dwModifiers parameter of HttpAddRequestHeaders }
  1994.  
  1995.   HTTP_ADDREQ_INDEX_MASK          = $0000FFFF;
  1996.   {$EXTERNALSYM HTTP_ADDREQ_INDEX_MASK}
  1997.   HTTP_ADDREQ_FLAGS_MASK          = $FFFF0000;
  1998.   {$EXTERNALSYM HTTP_ADDREQ_FLAGS_MASK}
  1999.  
  2000. { HTTP_ADDREQ_FLAG_ADD_IF_NEW - the header will only be added if it doesn't }
  2001. { already exist }
  2002.  
  2003.   HTTP_ADDREQ_FLAG_ADD_IF_NEW     = $10000000;
  2004.   {$EXTERNALSYM HTTP_ADDREQ_FLAG_ADD_IF_NEW}
  2005.  
  2006. { HTTP_ADDREQ_FLAG_ADD - if HTTP_ADDREQ_FLAG_REPLACE is set but the header is }
  2007. { not found then if this flag is set, the header is added anyway, so long as }
  2008. { there is a valid header-value }
  2009.  
  2010.   HTTP_ADDREQ_FLAG_ADD            = $20000000;
  2011.   {$EXTERNALSYM HTTP_ADDREQ_FLAG_ADD}
  2012.  
  2013. { HTTP_ADDREQ_FLAG_COALESCE - coalesce headers with same name. e.g. }
  2014. { "Accept: text/*" and "Accept: audio/*" with this flag results in a single }
  2015. { header: "Accept: text/*, audio/*" }
  2016.  
  2017.   HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA           = $40000000;
  2018.   {$EXTERNALSYM HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA}
  2019.   HTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON       = $01000000;
  2020.   {$EXTERNALSYM HTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON}
  2021.   HTTP_ADDREQ_FLAG_COALESCE                      = HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA;
  2022.   {$EXTERNALSYM HTTP_ADDREQ_FLAG_COALESCE}
  2023.  
  2024. { HTTP_ADDREQ_FLAG_REPLACE - replaces the specified header. Only one header can }
  2025. { be supplied in the buffer. If the header to be replaced is not the first }
  2026. { in a list of headers with the same name, then the relative index should be }
  2027. { supplied in the low 8 bits of the dwModifiers parameter. If the header-value }
  2028. { part is missing, then the header is removed }
  2029.  
  2030.   HTTP_ADDREQ_FLAG_REPLACE        = $80000000;
  2031.   {$EXTERNALSYM HTTP_ADDREQ_FLAG_REPLACE}
  2032.  
  2033. function HttpSendRequest(hRequest: HINTERNET; lpszHeaders: PChar; 
  2034.   dwHeadersLength: DWORD; lpOptional: Pointer; 
  2035.   dwOptionalLength: DWORD): BOOL; stdcall;
  2036.   {$EXTERNALSYM HttpSendRequest}
  2037. function HttpSendRequestA(hRequest: HINTERNET; lpszHeaders: PAnsiChar; 
  2038.   dwHeadersLength: DWORD; lpOptional: Pointer; 
  2039.   dwOptionalLength: DWORD): BOOL; stdcall;
  2040.   {$EXTERNALSYM HttpSendRequestA}
  2041. function HttpSendRequestW(hRequest: HINTERNET; lpszHeaders: PWideChar; 
  2042.   dwHeadersLength: DWORD; lpOptional: Pointer; 
  2043.   dwOptionalLength: DWORD): BOOL; stdcall;
  2044.   {$EXTERNALSYM HttpSendRequestW}
  2045.  
  2046. function HttpSendRequestEx(hRequest: HINTERNET; lpBuffersIn: PInternetBuffers;
  2047.     lpBuffersOut: PInternetBuffers;
  2048.     dwFlags: DWORD; dwContext: DWORD): BOOL; stdcall;
  2049.   {$EXTERNALSYM HttpSendRequestEx}
  2050. function HttpSendRequestExA(hRequest: HINTERNET; lpBuffersIn: PInternetBuffers;
  2051.     lpBuffersOut: PInternetBuffers;
  2052.     dwFlags: DWORD; dwContext: DWORD): BOOL; stdcall;
  2053.   {$EXTERNALSYM HttpSendRequestExA}
  2054. function HttpSendRequestExW(hRequest: HINTERNET; lpBuffersIn: PInternetBuffers;
  2055.     lpBuffersOut: PInternetBuffers;
  2056.     dwFlags: DWORD; dwContext: DWORD): BOOL; stdcall;
  2057.   {$EXTERNALSYM HttpSendRequestExW}
  2058.  
  2059. { flags for HttpSendRequestEx(), HttpEndRequest() }
  2060. const
  2061.   HSR_ASYNC       = WININET_API_FLAG_ASYNC;          { force async }
  2062.   {$EXTERNALSYM HSR_ASYNC}
  2063.   HSR_SYNC        = WININET_API_FLAG_SYNC;           { force sync }
  2064.   {$EXTERNALSYM HSR_SYNC}
  2065.   HSR_USE_CONTEXT = WININET_API_FLAG_USE_CONTEXT;    { use dwContext value }
  2066.   {$EXTERNALSYM HSR_USE_CONTEXT}
  2067.   HSR_INITIATE    = $00000008;                       { iterative operation (completed by HttpEndRequest) }
  2068.   {$EXTERNALSYM HSR_INITIATE}
  2069.   HSR_DOWNLOAD    = $00000010;                       { download to file }
  2070.   {$EXTERNALSYM HSR_DOWNLOAD}
  2071.   HSR_CHUNKED     = $00000020;                       { operation is send of chunked data }
  2072.   {$EXTERNALSYM HSR_CHUNKED}
  2073.  
  2074. function HttpEndRequest(hRequest: HINTERNET;
  2075.   lpBuffersOut: PInternetBuffers; dwFlags: DWORD;
  2076.   dwContext: DWORD): BOOL; stdcall;
  2077.   {$EXTERNALSYM HttpEndRequest}
  2078. function HttpEndRequestA(hRequest: HINTERNET;
  2079.   lpBuffersOut: PInternetBuffers; dwFlags: DWORD;
  2080.   dwContext: DWORD): BOOL; stdcall;
  2081.   {$EXTERNALSYM HttpEndRequestA}
  2082. function HttpEndRequestW(hRequest: HINTERNET;
  2083.   lpBuffersOut: PInternetBuffers; dwFlags: DWORD;
  2084.   dwContext: DWORD): BOOL; stdcall;
  2085.   {$EXTERNALSYM HttpEndRequestW}
  2086.  
  2087. function HttpQueryInfo(hRequest: HINTERNET; dwInfoLevel: DWORD;
  2088.   lpvBuffer: Pointer; var lpdwBufferLength: DWORD;
  2089.   var lpdwReserved: DWORD): BOOL; stdcall;
  2090.   {$EXTERNALSYM HttpQueryInfo}
  2091. function HttpQueryInfoA(hRequest: HINTERNET; dwInfoLevel: DWORD;
  2092.   lpvBuffer: Pointer; var lpdwBufferLength: DWORD;
  2093.   var lpdwReserved: DWORD): BOOL; stdcall;
  2094.   {$EXTERNALSYM HttpQueryInfoA}
  2095. function HttpQueryInfoW(hRequest: HINTERNET; dwInfoLevel: DWORD;
  2096.   lpvBuffer: Pointer; var lpdwBufferLength: DWORD;
  2097.   var lpdwReserved: DWORD): BOOL; stdcall;
  2098.   {$EXTERNALSYM HttpQueryInfoW}
  2099.  
  2100. { Cookie APIs }
  2101.  
  2102. function InternetSetCookie(lpszUrl, lpszCookieName,
  2103.   lpszCookieData: PChar): BOOL; stdcall;
  2104.   {$EXTERNALSYM InternetSetCookie}
  2105. function InternetSetCookieA(lpszUrl, lpszCookieName,
  2106.   lpszCookieData: PAnsiChar): BOOL; stdcall;
  2107.   {$EXTERNALSYM InternetSetCookieA}
  2108. function InternetSetCookieW(lpszUrl, lpszCookieName,
  2109.   lpszCookieData: PWideChar): BOOL; stdcall;
  2110.   {$EXTERNALSYM InternetSetCookieW}
  2111.  
  2112. function InternetGetCookie(lpszUrl, lpszCookieName,
  2113.   lpszCookieData: PChar; var lpdwSize: DWORD): BOOL; stdcall;
  2114.   {$EXTERNALSYM InternetGetCookie}
  2115. function InternetGetCookieA(lpszUrl, lpszCookieName,
  2116.   lpszCookieData: PAnsiChar; var lpdwSize: DWORD): BOOL; stdcall;
  2117.   {$EXTERNALSYM InternetGetCookieA}
  2118. function InternetGetCookieW(lpszUrl, lpszCookieName,
  2119.   lpszCookieData: PWideChar; var lpdwSize: DWORD): BOOL; stdcall;
  2120.   {$EXTERNALSYM InternetGetCookieW}
  2121.  
  2122. function InternetAttemptConnect(dwReserved: DWORD): DWORD; stdcall;
  2123.   {$EXTERNALSYM InternetAttemptConnect}
  2124.  
  2125. function InternetCheckConnection(lpszUrl: PAnsiChar; dwFlags: DWORD;
  2126.     dwReserved: DWORD): BOOL; stdcall;
  2127.   {$EXTERNALSYM InternetCheckConnection}
  2128. function InternetCheckConnectionA(lpszUrl: PAnsiChar; dwFlags: DWORD;
  2129.     dwReserved: DWORD): BOOL; stdcall;
  2130.   {$EXTERNALSYM InternetCheckConnectionA}
  2131. function InternetCheckConnectionW(lpszUrl: PAnsiChar; dwFlags: DWORD;
  2132.     dwReserved: DWORD): BOOL; stdcall;
  2133.   {$EXTERNALSYM InternetCheckConnectionW}
  2134.  
  2135. { Internet UI }
  2136.  
  2137. { InternetErrorDlg - Provides UI for certain Errors. }
  2138. const
  2139.   FLAGS_ERROR_UI_FILTER_FOR_ERRORS            = $01;
  2140.   {$EXTERNALSYM FLAGS_ERROR_UI_FILTER_FOR_ERRORS}
  2141.   FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS         = $02;
  2142.   {$EXTERNALSYM FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS}
  2143.   FLAGS_ERROR_UI_FLAGS_GENERATE_DATA          = $04;
  2144.   {$EXTERNALSYM FLAGS_ERROR_UI_FLAGS_GENERATE_DATA}
  2145.   FLAGS_ERROR_UI_FLAGS_NO_UI                  = $08;
  2146.   {$EXTERNALSYM FLAGS_ERROR_UI_FLAGS_NO_UI}
  2147.   FLAGS_ERROR_UI_SERIALIZE_DIALOGS            = $10;
  2148.   {$EXTERNALSYM FLAGS_ERROR_UI_SERIALIZE_DIALOGS}
  2149.  
  2150. function InternetAuthNotifyCallback(
  2151.     dwContext: DWORD;     { as passed to InternetErrorDlg }
  2152.     dwReturn: DWORD;      { error code: success, resend, or cancel }
  2153.     lpReserved: Pointer   { reserved: will be set to null }
  2154. ): DWORD; stdcall;
  2155.   {$EXTERNALSYM InternetAuthNotifyCallback}
  2156.  
  2157. type
  2158.   PFN_AUTH_NOTIFY = function(dwContext:DWORD; dwReturn:DWORD;
  2159.     lpReserved:Pointer): DWORD;
  2160.   {$EXTERNALSYM PFN_AUTH_NOTIFY}
  2161.  
  2162. function InternetErrorDlg(hWnd: HWND; hRequest: HINTERNET;
  2163.   dwError, dwFlags: DWORD; var lppvData: Pointer): DWORD; stdcall;
  2164.   {$EXTERNALSYM InternetErrorDlg}
  2165.  
  2166. function InternetConfirmZoneCrossing(hWnd: HWND;
  2167.   szUrlPrev, szUrlNew: LPSTR; bPost: BOOL): DWORD; stdcall;
  2168.   {$EXTERNALSYM InternetConfirmZoneCrossing}
  2169.  
  2170. const
  2171. { Internet API error returns }
  2172.  
  2173.   INTERNET_ERROR_BASE                         = 12000;
  2174.   {$EXTERNALSYM INTERNET_ERROR_BASE}
  2175.   ERROR_INTERNET_OUT_OF_HANDLES               = INTERNET_ERROR_BASE + 1;
  2176.   {$EXTERNALSYM ERROR_INTERNET_OUT_OF_HANDLES}
  2177.   ERROR_INTERNET_TIMEOUT                      = INTERNET_ERROR_BASE + 2;
  2178.   {$EXTERNALSYM ERROR_INTERNET_TIMEOUT}
  2179.   ERROR_INTERNET_EXTENDED_ERROR               = INTERNET_ERROR_BASE + 3;
  2180.   {$EXTERNALSYM ERROR_INTERNET_EXTENDED_ERROR}
  2181.   ERROR_INTERNET_INTERNAL_ERROR               = INTERNET_ERROR_BASE + 4;
  2182.   {$EXTERNALSYM ERROR_INTERNET_INTERNAL_ERROR}
  2183.   ERROR_INTERNET_INVALID_URL                  = INTERNET_ERROR_BASE + 5;
  2184.   {$EXTERNALSYM ERROR_INTERNET_INVALID_URL}
  2185.   ERROR_INTERNET_UNRECOGNIZED_SCHEME          = INTERNET_ERROR_BASE + 6;
  2186.   {$EXTERNALSYM ERROR_INTERNET_UNRECOGNIZED_SCHEME}
  2187.   ERROR_INTERNET_NAME_NOT_RESOLVED            = INTERNET_ERROR_BASE + 7;
  2188.   {$EXTERNALSYM ERROR_INTERNET_NAME_NOT_RESOLVED}
  2189.   ERROR_INTERNET_PROTOCOL_NOT_FOUND           = INTERNET_ERROR_BASE + 8;
  2190.   {$EXTERNALSYM ERROR_INTERNET_PROTOCOL_NOT_FOUND}
  2191.   ERROR_INTERNET_INVALID_OPTION               = INTERNET_ERROR_BASE + 9;
  2192.   {$EXTERNALSYM ERROR_INTERNET_INVALID_OPTION}
  2193.   ERROR_INTERNET_BAD_OPTION_LENGTH            = INTERNET_ERROR_BASE + 10;
  2194.   {$EXTERNALSYM ERROR_INTERNET_BAD_OPTION_LENGTH}
  2195.   ERROR_INTERNET_OPTION_NOT_SETTABLE          = INTERNET_ERROR_BASE + 11;
  2196.   {$EXTERNALSYM ERROR_INTERNET_OPTION_NOT_SETTABLE}
  2197.   ERROR_INTERNET_SHUTDOWN                     = INTERNET_ERROR_BASE + 12;
  2198.   {$EXTERNALSYM ERROR_INTERNET_SHUTDOWN}
  2199.   ERROR_INTERNET_INCORRECT_USER_NAME          = INTERNET_ERROR_BASE + 13;
  2200.   {$EXTERNALSYM ERROR_INTERNET_INCORRECT_USER_NAME}
  2201.   ERROR_INTERNET_INCORRECT_PASSWORD           = INTERNET_ERROR_BASE + 14;
  2202.   {$EXTERNALSYM ERROR_INTERNET_INCORRECT_PASSWORD}
  2203.   ERROR_INTERNET_LOGIN_FAILURE                = INTERNET_ERROR_BASE + 15;
  2204.   {$EXTERNALSYM ERROR_INTERNET_LOGIN_FAILURE}
  2205.   ERROR_INTERNET_INVALID_OPERATION            = INTERNET_ERROR_BASE + 16;
  2206.   {$EXTERNALSYM ERROR_INTERNET_INVALID_OPERATION}
  2207.   ERROR_INTERNET_OPERATION_CANCELLED          = INTERNET_ERROR_BASE + 17;
  2208.   {$EXTERNALSYM ERROR_INTERNET_OPERATION_CANCELLED}
  2209.   ERROR_INTERNET_INCORRECT_HANDLE_TYPE        = INTERNET_ERROR_BASE + 18;
  2210.   {$EXTERNALSYM ERROR_INTERNET_INCORRECT_HANDLE_TYPE}
  2211.   ERROR_INTERNET_INCORRECT_HANDLE_STATE       = INTERNET_ERROR_BASE + 19;
  2212.   {$EXTERNALSYM ERROR_INTERNET_INCORRECT_HANDLE_STATE}
  2213.   ERROR_INTERNET_NOT_PROXY_REQUEST            = INTERNET_ERROR_BASE + 20;
  2214.   {$EXTERNALSYM ERROR_INTERNET_NOT_PROXY_REQUEST}
  2215.   ERROR_INTERNET_REGISTRY_VALUE_NOT_FOUND     = INTERNET_ERROR_BASE + 21;
  2216.   {$EXTERNALSYM ERROR_INTERNET_REGISTRY_VALUE_NOT_FOUND}
  2217.   ERROR_INTERNET_BAD_REGISTRY_PARAMETER       = INTERNET_ERROR_BASE + 22;
  2218.   {$EXTERNALSYM ERROR_INTERNET_BAD_REGISTRY_PARAMETER}
  2219.   ERROR_INTERNET_NO_DIRECT_ACCESS             = INTERNET_ERROR_BASE + 23;
  2220.   {$EXTERNALSYM ERROR_INTERNET_NO_DIRECT_ACCESS}
  2221.   ERROR_INTERNET_NO_CONTEXT                   = INTERNET_ERROR_BASE + 24;
  2222.   {$EXTERNALSYM ERROR_INTERNET_NO_CONTEXT}
  2223.   ERROR_INTERNET_NO_CALLBACK                  = INTERNET_ERROR_BASE + 25;
  2224.   {$EXTERNALSYM ERROR_INTERNET_NO_CALLBACK}
  2225.   ERROR_INTERNET_REQUEST_PENDING              = INTERNET_ERROR_BASE + 26;
  2226.   {$EXTERNALSYM ERROR_INTERNET_REQUEST_PENDING}
  2227.   ERROR_INTERNET_INCORRECT_FORMAT             = INTERNET_ERROR_BASE + 27;
  2228.   {$EXTERNALSYM ERROR_INTERNET_INCORRECT_FORMAT}
  2229.   ERROR_INTERNET_ITEM_NOT_FOUND               = INTERNET_ERROR_BASE + 28;
  2230.   {$EXTERNALSYM ERROR_INTERNET_ITEM_NOT_FOUND}
  2231.   ERROR_INTERNET_CANNOT_CONNECT               = INTERNET_ERROR_BASE + 29;
  2232.   {$EXTERNALSYM ERROR_INTERNET_CANNOT_CONNECT}
  2233.   ERROR_INTERNET_CONNECTION_ABORTED           = INTERNET_ERROR_BASE + 30;
  2234.   {$EXTERNALSYM ERROR_INTERNET_CONNECTION_ABORTED}
  2235.   ERROR_INTERNET_CONNECTION_RESET             = INTERNET_ERROR_BASE + 31;
  2236.   {$EXTERNALSYM ERROR_INTERNET_CONNECTION_RESET}
  2237.   ERROR_INTERNET_FORCE_RETRY                  = INTERNET_ERROR_BASE + 32;
  2238.   {$EXTERNALSYM ERROR_INTERNET_FORCE_RETRY}
  2239.   ERROR_INTERNET_INVALID_PROXY_REQUEST        = INTERNET_ERROR_BASE + 33;
  2240.   {$EXTERNALSYM ERROR_INTERNET_INVALID_PROXY_REQUEST}
  2241.   ERROR_INTERNET_HANDLE_EXISTS                = INTERNET_ERROR_BASE + 36;
  2242.   {$EXTERNALSYM ERROR_INTERNET_HANDLE_EXISTS}
  2243.   ERROR_INTERNET_SEC_CERT_DATE_INVALID        = INTERNET_ERROR_BASE + 37;
  2244.   {$EXTERNALSYM ERROR_INTERNET_SEC_CERT_DATE_INVALID}
  2245.   ERROR_INTERNET_SEC_CERT_CN_INVALID          = INTERNET_ERROR_BASE + 38;
  2246.   {$EXTERNALSYM ERROR_INTERNET_SEC_CERT_CN_INVALID}
  2247.   ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR       = INTERNET_ERROR_BASE + 39;
  2248.   {$EXTERNALSYM ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR}
  2249.   ERROR_INTERNET_HTTPS_TO_HTTP_ON_REDIR       = INTERNET_ERROR_BASE + 40;
  2250.   {$EXTERNALSYM ERROR_INTERNET_HTTPS_TO_HTTP_ON_REDIR}
  2251.   ERROR_INTERNET_MIXED_SECURITY               = INTERNET_ERROR_BASE + 41;
  2252.   {$EXTERNALSYM ERROR_INTERNET_MIXED_SECURITY}
  2253.   ERROR_INTERNET_CHG_POST_IS_NON_SECURE       = INTERNET_ERROR_BASE + 42;
  2254.   {$EXTERNALSYM ERROR_INTERNET_CHG_POST_IS_NON_SECURE}
  2255.   ERROR_INTERNET_POST_IS_NON_SECURE           = INTERNET_ERROR_BASE + 43;
  2256.   {$EXTERNALSYM ERROR_INTERNET_POST_IS_NON_SECURE}
  2257.   ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED      = INTERNET_ERROR_BASE + 44;
  2258.   {$EXTERNALSYM ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED}
  2259.   ERROR_INTERNET_INVALID_CA                   = INTERNET_ERROR_BASE + 45;
  2260.   {$EXTERNALSYM ERROR_INTERNET_INVALID_CA}
  2261.   ERROR_INTERNET_CLIENT_AUTH_NOT_SETUP        = INTERNET_ERROR_BASE + 46;
  2262.   {$EXTERNALSYM ERROR_INTERNET_CLIENT_AUTH_NOT_SETUP}
  2263.   ERROR_INTERNET_ASYNC_THREAD_FAILED          = INTERNET_ERROR_BASE + 47;
  2264.   {$EXTERNALSYM ERROR_INTERNET_ASYNC_THREAD_FAILED}
  2265.   ERROR_INTERNET_REDIRECT_SCHEME_CHANGE       = INTERNET_ERROR_BASE + 48;
  2266.   {$EXTERNALSYM ERROR_INTERNET_REDIRECT_SCHEME_CHANGE}
  2267.   ERROR_INTERNET_DIALOG_PENDING               = INTERNET_ERROR_BASE + 49;
  2268.   {$EXTERNALSYM ERROR_INTERNET_DIALOG_PENDING}
  2269.   ERROR_INTERNET_RETRY_DIALOG                 = INTERNET_ERROR_BASE + 50;
  2270.   {$EXTERNALSYM ERROR_INTERNET_RETRY_DIALOG}
  2271.   ERROR_INTERNET_HTTPS_HTTP_SUBMIT_REDIR      = INTERNET_ERROR_BASE + 52;
  2272.   {$EXTERNALSYM ERROR_INTERNET_HTTPS_HTTP_SUBMIT_REDIR}
  2273.   ERROR_INTERNET_INSERT_CDROM                 = INTERNET_ERROR_BASE + 53;
  2274.   {$EXTERNALSYM ERROR_INTERNET_INSERT_CDROM}
  2275.  
  2276. { FTP API errors }
  2277.  
  2278.   ERROR_FTP_TRANSFER_IN_PROGRESS              = INTERNET_ERROR_BASE + 110;
  2279.   {$EXTERNALSYM ERROR_FTP_TRANSFER_IN_PROGRESS}
  2280.   ERROR_FTP_DROPPED                           = INTERNET_ERROR_BASE + 111;
  2281.   {$EXTERNALSYM ERROR_FTP_DROPPED}
  2282.   ERROR_FTP_NO_PASSIVE_MODE                   = INTERNET_ERROR_BASE + 112;
  2283.   {$EXTERNALSYM ERROR_FTP_NO_PASSIVE_MODE}
  2284.  
  2285. { gopher API errors }
  2286.  
  2287.   ERROR_GOPHER_PROTOCOL_ERROR                 = INTERNET_ERROR_BASE + 130;
  2288.   {$EXTERNALSYM ERROR_GOPHER_PROTOCOL_ERROR}
  2289.   ERROR_GOPHER_NOT_FILE                       = INTERNET_ERROR_BASE + 131;
  2290.   {$EXTERNALSYM ERROR_GOPHER_NOT_FILE}
  2291.   ERROR_GOPHER_DATA_ERROR                     = INTERNET_ERROR_BASE + 132;
  2292.   {$EXTERNALSYM ERROR_GOPHER_DATA_ERROR}
  2293.   ERROR_GOPHER_END_OF_DATA                    = INTERNET_ERROR_BASE + 133;
  2294.   {$EXTERNALSYM ERROR_GOPHER_END_OF_DATA}
  2295.   ERROR_GOPHER_INVALID_LOCATOR                = INTERNET_ERROR_BASE + 134;
  2296.   {$EXTERNALSYM ERROR_GOPHER_INVALID_LOCATOR}
  2297.   ERROR_GOPHER_INCORRECT_LOCATOR_TYPE         = INTERNET_ERROR_BASE + 135;
  2298.   {$EXTERNALSYM ERROR_GOPHER_INCORRECT_LOCATOR_TYPE}
  2299.   ERROR_GOPHER_NOT_GOPHER_PLUS                = INTERNET_ERROR_BASE + 136;
  2300.   {$EXTERNALSYM ERROR_GOPHER_NOT_GOPHER_PLUS}
  2301.   ERROR_GOPHER_ATTRIBUTE_NOT_FOUND            = INTERNET_ERROR_BASE + 137;
  2302.   {$EXTERNALSYM ERROR_GOPHER_ATTRIBUTE_NOT_FOUND}
  2303.   ERROR_GOPHER_UNKNOWN_LOCATOR                = INTERNET_ERROR_BASE + 138;
  2304.   {$EXTERNALSYM ERROR_GOPHER_UNKNOWN_LOCATOR}
  2305.  
  2306. { HTTP API errors }
  2307.  
  2308.   ERROR_HTTP_HEADER_NOT_FOUND                 = INTERNET_ERROR_BASE + 150;
  2309.   {$EXTERNALSYM ERROR_HTTP_HEADER_NOT_FOUND}
  2310.   ERROR_HTTP_DOWNLEVEL_SERVER                 = INTERNET_ERROR_BASE + 151;
  2311.   {$EXTERNALSYM ERROR_HTTP_DOWNLEVEL_SERVER}
  2312.   ERROR_HTTP_INVALID_SERVER_RESPONSE          = INTERNET_ERROR_BASE + 152;
  2313.   {$EXTERNALSYM ERROR_HTTP_INVALID_SERVER_RESPONSE}
  2314.   ERROR_HTTP_INVALID_HEADER                   = INTERNET_ERROR_BASE + 153;
  2315.   {$EXTERNALSYM ERROR_HTTP_INVALID_HEADER}
  2316.   ERROR_HTTP_INVALID_QUERY_REQUEST            = INTERNET_ERROR_BASE + 154;
  2317.   {$EXTERNALSYM ERROR_HTTP_INVALID_QUERY_REQUEST}
  2318.   ERROR_HTTP_HEADER_ALREADY_EXISTS            = INTERNET_ERROR_BASE + 155;
  2319.   {$EXTERNALSYM ERROR_HTTP_HEADER_ALREADY_EXISTS}
  2320.   ERROR_HTTP_REDIRECT_FAILED                  = INTERNET_ERROR_BASE + 156;
  2321.   {$EXTERNALSYM ERROR_HTTP_REDIRECT_FAILED}
  2322.   ERROR_HTTP_NOT_REDIRECTED                   = INTERNET_ERROR_BASE + 160;
  2323.   {$EXTERNALSYM ERROR_HTTP_NOT_REDIRECTED}
  2324.   ERROR_HTTP_COOKIE_NEEDS_CONFIRMATION        = INTERNET_ERROR_BASE + 161;
  2325.   {$EXTERNALSYM ERROR_HTTP_COOKIE_NEEDS_CONFIRMATION}
  2326.   ERROR_HTTP_COOKIE_DECLINED                  = INTERNET_ERROR_BASE + 162;
  2327.   {$EXTERNALSYM ERROR_HTTP_COOKIE_DECLINED}
  2328.   ERROR_HTTP_REDIRECT_NEEDS_CONFIRMATION      = INTERNET_ERROR_BASE + 168;
  2329.   {$EXTERNALSYM ERROR_HTTP_REDIRECT_NEEDS_CONFIRMATION}
  2330.  
  2331. { additional Internet API error codes }
  2332.   ERROR_INTERNET_SECURITY_CHANNEL_ERROR       = INTERNET_ERROR_BASE + 157;
  2333.   {$EXTERNALSYM ERROR_INTERNET_SECURITY_CHANNEL_ERROR}
  2334.   ERROR_INTERNET_UNABLE_TO_CACHE_FILE         = INTERNET_ERROR_BASE + 158;
  2335.   {$EXTERNALSYM ERROR_INTERNET_UNABLE_TO_CACHE_FILE}
  2336.   ERROR_INTERNET_TCPIP_NOT_INSTALLED          = INTERNET_ERROR_BASE + 159;
  2337.   {$EXTERNALSYM ERROR_INTERNET_TCPIP_NOT_INSTALLED}
  2338.   ERROR_INTERNET_DISCONNECTED                 = INTERNET_ERROR_BASE + 163;
  2339.   {$EXTERNALSYM ERROR_INTERNET_DISCONNECTED}
  2340.   ERROR_INTERNET_SERVER_UNREACHABLE           = INTERNET_ERROR_BASE + 164;
  2341.   {$EXTERNALSYM ERROR_INTERNET_SERVER_UNREACHABLE}
  2342.   ERROR_INTERNET_PROXY_SERVER_UNREACHABLE     = INTERNET_ERROR_BASE + 165;
  2343.   {$EXTERNALSYM ERROR_INTERNET_PROXY_SERVER_UNREACHABLE}
  2344.   ERROR_INTERNET_BAD_AUTO_PROXY_SCRIPT        = INTERNET_ERROR_BASE + 166;
  2345.   {$EXTERNALSYM ERROR_INTERNET_BAD_AUTO_PROXY_SCRIPT}
  2346.   ERROR_INTERNET_UNABLE_TO_DOWNLOAD_SCRIPT    = INTERNET_ERROR_BASE + 167;
  2347.   {$EXTERNALSYM ERROR_INTERNET_UNABLE_TO_DOWNLOAD_SCRIPT}
  2348.   ERROR_INTERNET_SEC_INVALID_CERT             = INTERNET_ERROR_BASE + 169;
  2349.   {$EXTERNALSYM ERROR_INTERNET_SEC_INVALID_CERT}
  2350.   ERROR_INTERNET_SEC_CERT_REVOKED             = INTERNET_ERROR_BASE + 170;
  2351.   {$EXTERNALSYM ERROR_INTERNET_SEC_CERT_REVOKED}
  2352.  
  2353. { InternetAutodial specific errors }
  2354.  
  2355.   ERROR_INTERNET_FAILED_DUETOSECURITYCHECK    = INTERNET_ERROR_BASE + 171;
  2356.   {$EXTERNALSYM ERROR_INTERNET_FAILED_DUETOSECURITYCHECK}
  2357.   INTERNET_ERROR_LAST                         = ERROR_INTERNET_FAILED_DUETOSECURITYCHECK;
  2358.   {$EXTERNALSYM INTERNET_ERROR_LAST}
  2359.  
  2360. { URLCACHE APIs }
  2361.  
  2362. { datatype definitions. }
  2363.  
  2364. { cache entry type flags. }
  2365.  
  2366.   NORMAL_CACHE_ENTRY          = $00000001;
  2367.   {$EXTERNALSYM NORMAL_CACHE_ENTRY}
  2368.   STABLE_CACHE_ENTRY          = $00000002;
  2369.   {$EXTERNALSYM STABLE_CACHE_ENTRY}
  2370.   STICKY_CACHE_ENTRY          = $00000004;
  2371.   {$EXTERNALSYM STICKY_CACHE_ENTRY}
  2372.   COOKIE_CACHE_ENTRY          = $00100000;
  2373.   {$EXTERNALSYM COOKIE_CACHE_ENTRY}
  2374.   URLHISTORY_CACHE_ENTRY      = $00200000;
  2375.   {$EXTERNALSYM URLHISTORY_CACHE_ENTRY}
  2376.   TRACK_OFFLINE_CACHE_ENTRY   = $00000010;
  2377.   {$EXTERNALSYM TRACK_OFFLINE_CACHE_ENTRY}
  2378.   TRACK_ONLINE_CACHE_ENTRY    = $00000020;
  2379.   {$EXTERNALSYM TRACK_ONLINE_CACHE_ENTRY}
  2380.   SPARSE_CACHE_ENTRY          = $00010000;
  2381.   {$EXTERNALSYM SPARSE_CACHE_ENTRY}
  2382.   OCX_CACHE_ENTRY             = $00020000;
  2383.   {$EXTERNALSYM OCX_CACHE_ENTRY}
  2384.  
  2385.   URLCACHE_FIND_DEFAULT_FILTER = NORMAL_CACHE_ENTRY or
  2386.                                  COOKIE_CACHE_ENTRY or
  2387.                                  URLHISTORY_CACHE_ENTRY or
  2388.                                  TRACK_OFFLINE_CACHE_ENTRY or
  2389.                                  TRACK_ONLINE_CACHE_ENTRY or
  2390.                                  STICKY_CACHE_ENTRY;
  2391.   {$EXTERNALSYM URLCACHE_FIND_DEFAULT_FILTER}
  2392.  
  2393. type
  2394.   PInternetCacheEntryInfoA = ^INTERNET_CACHE_ENTRY_INFOA;
  2395.   INTERNET_CACHE_ENTRY_INFOA = record
  2396.     dwStructSize: DWORD;         { version of cache system. ?? do we need this for all entries? }
  2397.     lpszSourceUrlName: PAnsiChar;    { embedded pointer to the URL name string. }
  2398.     lpszLocalFileName: PAnsiChar;   { embedded pointer to the local file name. }
  2399.     CacheEntryType: DWORD;       { cache type bit mask. }
  2400.     dwUseCount: DWORD;           { current users count of the cache entry. }
  2401.     dwHitRate: DWORD;            { num of times the cache entry was retrieved. }
  2402.     dwSizeLow: DWORD;            { low DWORD of the file size. }
  2403.     dwSizeHigh: DWORD;           { high DWORD of the file size. }
  2404.     LastModifiedTime: TFileTime; { last modified time of the file in GMT format. }
  2405.     ExpireTime: TFileTime;       { expire time of the file in GMT format }
  2406.     LastAccessTime: TFileTime;   { last accessed time in GMT format }
  2407.     LastSyncTime: TFileTime;     { last time the URL was synchronized }
  2408.                                  { with the source }
  2409.     lpHeaderInfo: PBYTE;         { embedded pointer to the header info. }
  2410.     dwHeaderInfoSize: DWORD;     { size of the above header. }
  2411.     lpszFileExtension: PAnsiChar;   { File extension used to retrive the urldata as a file. }
  2412.     dwReserved: DWORD;           { reserved for future use. }
  2413.   end;
  2414.   {$EXTERNALSYM INTERNET_CACHE_ENTRY_INFOA}
  2415.   PInternetCacheEntryInfoW = ^INTERNET_CACHE_ENTRY_INFOW;
  2416.   INTERNET_CACHE_ENTRY_INFOW = record
  2417.     dwStructSize: DWORD;         { version of cache system. ?? do we need this for all entries? }
  2418.     lpszSourceUrlName: PAnsiChar;    { embedded pointer to the URL name string. }
  2419.     lpszLocalFileName: PWideChar;   { embedded pointer to the local file name. }
  2420.     CacheEntryType: DWORD;       { cache type bit mask. }
  2421.     dwUseCount: DWORD;           { current users count of the cache entry. }
  2422.     dwHitRate: DWORD;            { num of times the cache entry was retrieved. }
  2423.     dwSizeLow: DWORD;            { low DWORD of the file size. }
  2424.     dwSizeHigh: DWORD;           { high DWORD of the file size. }
  2425.     LastModifiedTime: TFileTime; { last modified time of the file in GMT format. }
  2426.     ExpireTime: TFileTime;       { expire time of the file in GMT format }
  2427.     LastAccessTime: TFileTime;   { last accessed time in GMT format }
  2428.     LastSyncTime: TFileTime;     { last time the URL was synchronized }
  2429.                                  { with the source }
  2430.     lpHeaderInfo: PBYTE;         { embedded pointer to the header info. }
  2431.     dwHeaderInfoSize: DWORD;     { size of the above header. }
  2432.     lpszFileExtension: PWideChar;   { File extension used to retrive the urldata as a file. }
  2433.     dwReserved: DWORD;           { reserved for future use. }
  2434.   end;
  2435.   {$EXTERNALSYM INTERNET_CACHE_ENTRY_INFOW}
  2436.   PInternetCacheEntryInfo = PInternetCacheEntryInfoA;
  2437.   TInternetCacheEntryInfoA = INTERNET_CACHE_ENTRY_INFOA;
  2438.   LPINTERNET_CACHE_ENTRY_INFOA = PInternetCacheEntryInfoA;
  2439.   {$EXTERNALSYM LPINTERNET_CACHE_ENTRY_INFOA}
  2440.   TInternetCacheEntryInfoW = INTERNET_CACHE_ENTRY_INFOW;
  2441.   LPINTERNET_CACHE_ENTRY_INFOW = PInternetCacheEntryInfoW;
  2442.   {$EXTERNALSYM LPINTERNET_CACHE_ENTRY_INFOW}
  2443.   TInternetCacheEntryInfo = TInternetCacheEntryInfoA;
  2444.  
  2445. { Cache APIs }
  2446.  
  2447. function CreateUrlCacheEntry(lpszUrlName: PAnsiChar;
  2448.   dwExpectedFileSize: DWORD; lpszFileExtension: PAnsiChar;
  2449.   lpszFileName: PChar; dwReserved: DWORD): BOOL; stdcall;
  2450.   {$EXTERNALSYM CreateUrlCacheEntry}
  2451. function CreateUrlCacheEntryA(lpszUrlName: PAnsiChar;
  2452.   dwExpectedFileSize: DWORD; lpszFileExtension: PAnsiChar;
  2453.   lpszFileName: PAnsiChar; dwReserved: DWORD): BOOL; stdcall;
  2454.   {$EXTERNALSYM CreateUrlCacheEntryA}
  2455. function CreateUrlCacheEntryW(lpszUrlName: PAnsiChar;
  2456.   dwExpectedFileSize: DWORD; lpszFileExtension: PAnsiChar;
  2457.   lpszFileName: PWideChar; dwReserved: DWORD): BOOL; stdcall;
  2458.   {$EXTERNALSYM CreateUrlCacheEntryW}
  2459.  
  2460. function CommitUrlCacheEntry(lpszUrlName, lpszLocalFileName: PAnsiChar;
  2461.   ExpireTime, LastModifiedTime: TFileTime;  CacheEntryType: DWORD;
  2462.   lpHeaderInfo: PBYTE; dwHeaderSize: DWORD; lpszFileExtension: PChar;
  2463.   dwReserved: DWORD): BOOL; stdcall;
  2464.   {$EXTERNALSYM CommitUrlCacheEntry}
  2465. function CommitUrlCacheEntryA(lpszUrlName, lpszLocalFileName: PAnsiChar;
  2466.   ExpireTime, LastModifiedTime: TFileTime;  CacheEntryType: DWORD;
  2467.   lpHeaderInfo: PBYTE; dwHeaderSize: DWORD; lpszFileExtension: PAnsiChar;
  2468.   dwReserved: DWORD): BOOL; stdcall;
  2469.   {$EXTERNALSYM CommitUrlCacheEntryA}
  2470. function CommitUrlCacheEntryW(lpszUrlName, lpszLocalFileName: PAnsiChar;
  2471.   ExpireTime, LastModifiedTime: TFileTime;  CacheEntryType: DWORD;
  2472.   lpHeaderInfo: PBYTE; dwHeaderSize: DWORD; lpszFileExtension: PWideChar;
  2473.   dwReserved: DWORD): BOOL; stdcall;
  2474.   {$EXTERNALSYM CommitUrlCacheEntryW}
  2475.  
  2476. function RetrieveUrlCacheEntryFile(lpszUrlName: PAnsiChar;
  2477.   var lpCacheEntryInfo: TInternetCacheEntryInfo;
  2478.   var lpdwCacheEntryInfoBufferSize: DWORD;
  2479.   dwReserved: DWORD): BOOL; stdcall;
  2480.   {$EXTERNALSYM RetrieveUrlCacheEntryFile}
  2481. function RetrieveUrlCacheEntryFileA(lpszUrlName: PAnsiChar;
  2482.   var lpCacheEntryInfo: TInternetCacheEntryInfo;
  2483.   var lpdwCacheEntryInfoBufferSize: DWORD;
  2484.   dwReserved: DWORD): BOOL; stdcall;
  2485.   {$EXTERNALSYM RetrieveUrlCacheEntryFileA}
  2486. function RetrieveUrlCacheEntryFileW(lpszUrlName: PAnsiChar;
  2487.   var lpCacheEntryInfo: TInternetCacheEntryInfo;
  2488.   var lpdwCacheEntryInfoBufferSize: DWORD;
  2489.   dwReserved: DWORD): BOOL; stdcall;
  2490.   {$EXTERNALSYM RetrieveUrlCacheEntryFileW}
  2491.  
  2492. function UnlockUrlCacheEntryFile(lpszUrlName: LPCSTR;
  2493.   dwReserved: DWORD): BOOL; stdcall;
  2494.   {$EXTERNALSYM UnlockUrlCacheEntryFile}
  2495.  
  2496. function RetrieveUrlCacheEntryStream(lpszUrlName: PAnsiChar;
  2497.   var lpCacheEntryInfo: TInternetCacheEntryInfo;
  2498.   var lpdwCacheEntryInfoBufferSize: DWORD; fRandomRead: BOOL;
  2499.   dwReserved: DWORD): THandle; stdcall;
  2500.   {$EXTERNALSYM RetrieveUrlCacheEntryStream}
  2501. function RetrieveUrlCacheEntryStreamA(lpszUrlName: PAnsiChar;
  2502.   var lpCacheEntryInfo: TInternetCacheEntryInfo;
  2503.   var lpdwCacheEntryInfoBufferSize: DWORD; fRandomRead: BOOL;
  2504.   dwReserved: DWORD): THandle; stdcall;
  2505.   {$EXTERNALSYM RetrieveUrlCacheEntryStreamA}
  2506. function RetrieveUrlCacheEntryStreamW(lpszUrlName: PAnsiChar;
  2507.   var lpCacheEntryInfo: TInternetCacheEntryInfo;
  2508.   var lpdwCacheEntryInfoBufferSize: DWORD; fRandomRead: BOOL;
  2509.   dwReserved: DWORD): THandle; stdcall;
  2510.   {$EXTERNALSYM RetrieveUrlCacheEntryStreamW}
  2511.  
  2512. function ReadUrlCacheEntryStream(hUrlCacheStream: THandle;
  2513.   dwLocation: DWORD; var lpBuffer: Pointer;
  2514.   var lpdwLen: DWORD; Reserved: DWORD): BOOL; stdcall;
  2515.   {$EXTERNALSYM ReadUrlCacheEntryStream}
  2516.  
  2517. function UnlockUrlCacheEntryStream(hUrlCacheStream: THandle;
  2518.   Reserved: DWORD): BOOL; stdcall;
  2519.   {$EXTERNALSYM UnlockUrlCacheEntryStream}
  2520.  
  2521. function GetUrlCacheEntryInfo(lpszUrlName: PAnsiChar;
  2522.   var lpCacheEntryInfo: TInternetCacheEntryInfo;
  2523.   var lpdwCacheEntryInfoBufferSize: DWORD): BOOL; stdcall;
  2524.   {$EXTERNALSYM GetUrlCacheEntryInfo}
  2525. function GetUrlCacheEntryInfoA(lpszUrlName: PAnsiChar;
  2526.   var lpCacheEntryInfo: TInternetCacheEntryInfo;
  2527.   var lpdwCacheEntryInfoBufferSize: DWORD): BOOL; stdcall;
  2528.   {$EXTERNALSYM GetUrlCacheEntryInfoA}
  2529. function GetUrlCacheEntryInfoW(lpszUrlName: PAnsiChar;
  2530.   var lpCacheEntryInfo: TInternetCacheEntryInfo;
  2531.   var lpdwCacheEntryInfoBufferSize: DWORD): BOOL; stdcall;
  2532.   {$EXTERNALSYM GetUrlCacheEntryInfoW}
  2533.  
  2534. function GetUrlCacheEntryInfoEx(
  2535.     lpszUrl: PAnsiChar;
  2536.     lpCacheEntryInfo: PInternetCacheEntryInfo;
  2537.     lpdwCacheEntryInfoBufSize: LPDWORD;
  2538.     lpszReserved: PAnsiChar; { must pass nil }
  2539.     lpdwReserved: LPDWORD; { must pass nil }
  2540.     lpReserved: Pointer; { must pass nil }
  2541.     dwFlags: DWORD { reserved }
  2542.     ): BOOL; stdcall;
  2543.   {$EXTERNALSYM GetUrlCacheEntryInfoEx}
  2544. function GetUrlCacheEntryInfoExA(
  2545.     lpszUrl: PAnsiChar;
  2546.     lpCacheEntryInfo: PInternetCacheEntryInfo;
  2547.     lpdwCacheEntryInfoBufSize: LPDWORD;
  2548.     lpszReserved: PAnsiChar; { must pass nil }
  2549.     lpdwReserved: LPDWORD; { must pass nil }
  2550.     lpReserved: Pointer; { must pass nil }
  2551.     dwFlags: DWORD { reserved }
  2552.     ): BOOL; stdcall;
  2553.   {$EXTERNALSYM GetUrlCacheEntryInfoExA}
  2554. function GetUrlCacheEntryInfoExW(
  2555.     lpszUrl: PAnsiChar;
  2556.     lpCacheEntryInfo: PInternetCacheEntryInfo;
  2557.     lpdwCacheEntryInfoBufSize: LPDWORD;
  2558.     lpszReserved: PAnsiChar; { must pass nil }
  2559.     lpdwReserved: LPDWORD; { must pass nil }
  2560.     lpReserved: Pointer; { must pass nil }
  2561.     dwFlags: DWORD { reserved }
  2562.     ): BOOL; stdcall;
  2563.   {$EXTERNALSYM GetUrlCacheEntryInfoExW}
  2564.  
  2565. const
  2566.   CACHE_ENTRY_ATTRIBUTE_FC        = $00000004;
  2567.   {$EXTERNALSYM CACHE_ENTRY_ATTRIBUTE_FC}
  2568.   CACHE_ENTRY_HITRATE_FC          = $00000010;
  2569.   {$EXTERNALSYM CACHE_ENTRY_HITRATE_FC}
  2570.   CACHE_ENTRY_MODTIME_FC          = $00000040;
  2571.   {$EXTERNALSYM CACHE_ENTRY_MODTIME_FC}
  2572.   CACHE_ENTRY_EXPTIME_FC          = $00000080;
  2573.   {$EXTERNALSYM CACHE_ENTRY_EXPTIME_FC}
  2574.   CACHE_ENTRY_ACCTIME_FC          = $00000100;
  2575.   {$EXTERNALSYM CACHE_ENTRY_ACCTIME_FC}
  2576.   CACHE_ENTRY_SYNCTIME_FC         = $00000200;
  2577.   {$EXTERNALSYM CACHE_ENTRY_SYNCTIME_FC}
  2578.   CACHE_ENTRY_HEADERINFO_FC       = $00000400;
  2579.   {$EXTERNALSYM CACHE_ENTRY_HEADERINFO_FC}
  2580.   CACHE_ENTRY_EXEMPT_DELTA_FC     = $00000800;
  2581.   {$EXTERNALSYM CACHE_ENTRY_EXEMPT_DELTA_FC}
  2582.  
  2583. function SetUrlCacheEntryInfo(lpszUrlName: PAnsiChar;
  2584.   var lpCacheEntryInfo: TInternetCacheEntryInfo;
  2585.   dwFieldControl: DWORD): BOOL; stdcall;
  2586.   {$EXTERNALSYM SetUrlCacheEntryInfo}
  2587. function SetUrlCacheEntryInfoA(lpszUrlName: PAnsiChar;
  2588.   var lpCacheEntryInfo: TInternetCacheEntryInfo;
  2589.   dwFieldControl: DWORD): BOOL; stdcall;
  2590.   {$EXTERNALSYM SetUrlCacheEntryInfoA}
  2591. function SetUrlCacheEntryInfoW(lpszUrlName: PAnsiChar;
  2592.   var lpCacheEntryInfo: TInternetCacheEntryInfo;
  2593.   dwFieldControl: DWORD): BOOL; stdcall;
  2594.   {$EXTERNALSYM SetUrlCacheEntryInfoW}
  2595.  
  2596. type
  2597.   GROUPID = Int64;
  2598.   {$EXTERNALSYM GROUPID}
  2599.  
  2600. function CreateUrlCacheGroup(dwFlags: DWORD;
  2601.   lpReserved: Pointer { must pass nill }
  2602.   ): Int64; stdcall;
  2603.   {$EXTERNALSYM CreateUrlCacheGroup}
  2604.  
  2605. function DeleteUrlCacheGroup(GroupId: Int64;
  2606.     dwFlags: DWORD;    { must pass 0 }
  2607.     lpReserved: Pointer { must pass nill }
  2608.     ): Bool; stdcall;
  2609.   {$EXTERNALSYM DeleteUrlCacheGroup}
  2610.  
  2611. { Flags for SetUrlCacheEntryGroup }
  2612.  
  2613. const
  2614.   INTERNET_CACHE_GROUP_ADD      = 0;
  2615.   {$EXTERNALSYM INTERNET_CACHE_GROUP_ADD}
  2616.   INTERNET_CACHE_GROUP_REMOVE   = 1;
  2617.   {$EXTERNALSYM INTERNET_CACHE_GROUP_REMOVE}
  2618.  
  2619. function SetUrlCacheEntryGroup(lpszUrlName: LPCSTR; dwFlags: DWORD;
  2620.   GroupId: Int64;
  2621.   pbGroupAttributes: PChar; { must pass nil }
  2622.   cbGroupAttributes: DWORD;  { must pass 0 }
  2623.   lpReserved: Pointer        { must pass nil }
  2624.   ): Bool; stdcall;
  2625.   {$EXTERNALSYM SetUrlCacheEntryGroup}
  2626.  
  2627. function FindFirstUrlCacheEntryEx(lpszUrlSearchPattern: PAnsiChar;
  2628.     dwFlags: DWORD;
  2629.     dwFilter: DWORD;
  2630.     GroupId: GROUPID;
  2631.     lpFirstCacheEntryInfo: PInternetCacheEntryInfo;
  2632.     lpdwFirstCacheEntryInfoBufferSize: LPDWORD;
  2633.     lpGroupAttributes: Pointer;  { must pass nil }
  2634.     pcbGroupAttributes: LPDWORD;    { must pass nil }
  2635.     lpReserved: Pointer             { must pass nil }
  2636.     ): THandle; stdcall;
  2637.   {$EXTERNALSYM FindFirstUrlCacheEntryEx}
  2638. function FindFirstUrlCacheEntryExA(lpszUrlSearchPattern: PAnsiChar;
  2639.     dwFlags: DWORD;
  2640.     dwFilter: DWORD;
  2641.     GroupId: GROUPID;
  2642.     lpFirstCacheEntryInfo: PInternetCacheEntryInfo;
  2643.     lpdwFirstCacheEntryInfoBufferSize: LPDWORD;
  2644.     lpGroupAttributes: Pointer;  { must pass nil }
  2645.     pcbGroupAttributes: LPDWORD;    { must pass nil }
  2646.     lpReserved: Pointer             { must pass nil }
  2647.     ): THandle; stdcall;
  2648.   {$EXTERNALSYM FindFirstUrlCacheEntryExA}
  2649. function FindFirstUrlCacheEntryExW(lpszUrlSearchPattern: PAnsiChar;
  2650.     dwFlags: DWORD;
  2651.     dwFilter: DWORD;
  2652.     GroupId: GROUPID;
  2653.     lpFirstCacheEntryInfo: PInternetCacheEntryInfo;
  2654.     lpdwFirstCacheEntryInfoBufferSize: LPDWORD;
  2655.     lpGroupAttributes: Pointer;  { must pass nil }
  2656.     pcbGroupAttributes: LPDWORD;    { must pass nil }
  2657.     lpReserved: Pointer             { must pass nil }
  2658.     ): THandle; stdcall;
  2659.   {$EXTERNALSYM FindFirstUrlCacheEntryExW}
  2660.  
  2661. function FindNextUrlCacheEntryEx(hEnumHandle: THANDLE;
  2662.     lpFirstCacheEntryInfo: PInternetCacheEntryInfo;
  2663.     lpdwFirstCacheEntryInfoBufferSize: LPDWORD;
  2664.     lpGroupAttributes: Pointer;  { must pass nil }
  2665.     pcbGroupAttributes: LPDWORD;    { must pass nil }
  2666.     lpReserved: Pointer             { must pass nil }
  2667.     ): BOOL; stdcall;
  2668.   {$EXTERNALSYM FindNextUrlCacheEntryEx}
  2669. function FindNextUrlCacheEntryExA(hEnumHandle: THANDLE;
  2670.     lpFirstCacheEntryInfo: PInternetCacheEntryInfo;
  2671.     lpdwFirstCacheEntryInfoBufferSize: LPDWORD;
  2672.     lpGroupAttributes: Pointer;  { must pass nil }
  2673.     pcbGroupAttributes: LPDWORD;    { must pass nil }
  2674.     lpReserved: Pointer             { must pass nil }
  2675.     ): BOOL; stdcall;
  2676.   {$EXTERNALSYM FindNextUrlCacheEntryExA}
  2677. function FindNextUrlCacheEntryExW(hEnumHandle: THANDLE;
  2678.     lpFirstCacheEntryInfo: PInternetCacheEntryInfo;
  2679.     lpdwFirstCacheEntryInfoBufferSize: LPDWORD;
  2680.     lpGroupAttributes: Pointer;  { must pass nil }
  2681.     pcbGroupAttributes: LPDWORD;    { must pass nil }
  2682.     lpReserved: Pointer             { must pass nil }
  2683.     ): BOOL; stdcall;
  2684.   {$EXTERNALSYM FindNextUrlCacheEntryExW}
  2685.  
  2686. function FindFirstUrlCacheEntry(lpszUrlSearchPattern: PAnsiChar;
  2687.   var lpFirstCacheEntryInfo: TInternetCacheEntryInfo;
  2688.   var lpdwFirstCacheEntryInfoBufferSize: DWORD): THandle; stdcall;
  2689.   {$EXTERNALSYM FindFirstUrlCacheEntry}
  2690. function FindFirstUrlCacheEntryA(lpszUrlSearchPattern: PAnsiChar;
  2691.   var lpFirstCacheEntryInfo: TInternetCacheEntryInfo;
  2692.   var lpdwFirstCacheEntryInfoBufferSize: DWORD): THandle; stdcall;
  2693.   {$EXTERNALSYM FindFirstUrlCacheEntryA}
  2694. function FindFirstUrlCacheEntryW(lpszUrlSearchPattern: PAnsiChar;
  2695.   var lpFirstCacheEntryInfo: TInternetCacheEntryInfo;
  2696.   var lpdwFirstCacheEntryInfoBufferSize: DWORD): THandle; stdcall;
  2697.   {$EXTERNALSYM FindFirstUrlCacheEntryW}
  2698.  
  2699. function FindNextUrlCacheEntry(hEnumHandle: THandle;
  2700.   var lpNextCacheEntryInfo: TInternetCacheEntryInfo;
  2701.   var lpdwNextCacheEntryInfoBufferSize: DWORD): BOOL; stdcall;
  2702.   {$EXTERNALSYM FindNextUrlCacheEntry}
  2703. function FindNextUrlCacheEntryA(hEnumHandle: THandle;
  2704.   var lpNextCacheEntryInfo: TInternetCacheEntryInfo;
  2705.   var lpdwNextCacheEntryInfoBufferSize: DWORD): BOOL; stdcall;
  2706.   {$EXTERNALSYM FindNextUrlCacheEntryA}
  2707. function FindNextUrlCacheEntryW(hEnumHandle: THandle;
  2708.   var lpNextCacheEntryInfo: TInternetCacheEntryInfo;
  2709.   var lpdwNextCacheEntryInfoBufferSize: DWORD): BOOL; stdcall;
  2710.   {$EXTERNALSYM FindNextUrlCacheEntryW}
  2711.  
  2712. function FindCloseUrlCache(hEnumHandle: THandle): BOOL; stdcall;
  2713.   {$EXTERNALSYM FindCloseUrlCache}
  2714.  
  2715. function DeleteUrlCacheEntry(lpszUrlName: LPCSTR): BOOL; stdcall;
  2716.   {$EXTERNALSYM DeleteUrlCacheEntry}
  2717.  
  2718. function InternetDial(hwndParent: HWND; lpszConnectoid: LPTSTR; dwFlags: DWORD;
  2719.   lpdwConnection: LPDWORD; dwReserved: DWORD): DWORD; stdcall;
  2720.   {$EXTERNALSYM InternetDial}
  2721.  
  2722. { Flags for InternetDial - must not conflict with InternetAutodial flags }
  2723. {                          as they are valid here also.                  }
  2724. const
  2725.   INTERNET_DIAL_UNATTENDED       = $8000;
  2726.   {$EXTERNALSYM INTERNET_DIAL_UNATTENDED}
  2727.  
  2728. function InternetHangUp(dwConnection: DWORD; dwReserved: DWORD): DWORD; stdcall;
  2729.   {$EXTERNALSYM InternetHangUp}
  2730.  
  2731. const
  2732.   INTERENT_GOONLINE_REFRESH = $00000001;
  2733.   {$EXTERNALSYM INTERENT_GOONLINE_REFRESH}
  2734.   INTERENT_GOONLINE_MASK    = $00000001;
  2735.   {$EXTERNALSYM INTERENT_GOONLINE_MASK}
  2736.  
  2737. function InternetGoOnline(lpszURL: LPTSTR; hwndParent: HWND;
  2738.   dwFlags: DWORD): BOOL; stdcall;
  2739.   {$EXTERNALSYM InternetGoOnline}
  2740.  
  2741. function InternetAutodial(dwFlags: DWORD; dwReserved: DWORD): BOOL; stdcall;
  2742.   {$EXTERNALSYM InternetAutodial}
  2743.  
  2744. { Flags for InternetAutodial }
  2745. const
  2746.   INTERNET_AUTODIAL_FORCE_ONLINE          = 1;
  2747.   {$EXTERNALSYM INTERNET_AUTODIAL_FORCE_ONLINE}
  2748.   INTERNET_AUTODIAL_FORCE_UNATTENDED      = 2;
  2749.   {$EXTERNALSYM INTERNET_AUTODIAL_FORCE_UNATTENDED}
  2750.   INTERNET_AUTODIAL_FAILIFSECURITYCHECK   = 4;
  2751.   {$EXTERNALSYM INTERNET_AUTODIAL_FAILIFSECURITYCHECK}
  2752.   INTERNET_AUTODIAL_FLAGS_MASK  = INTERNET_AUTODIAL_FORCE_ONLINE or
  2753.                                   INTERNET_AUTODIAL_FORCE_UNATTENDED or
  2754.                                   INTERNET_AUTODIAL_FAILIFSECURITYCHECK;
  2755.   {$EXTERNALSYM INTERNET_AUTODIAL_FLAGS_MASK}
  2756.  
  2757. function InternetAutodialHangup(dwReserved: DWORD): BOOL; stdcall;
  2758.   {$EXTERNALSYM InternetAutodialHangup}
  2759.  
  2760. function InternetGetConnectedState(lpdwFlags: LPDWORD;
  2761.   dwReserved: DWORD): BOOL; stdcall;
  2762.   {$EXTERNALSYM InternetGetConnectedState}
  2763.  
  2764. { Flags for InternetGetConnectedState }
  2765. const
  2766.   INTERNET_CONNECTION_MODEM           = 1;
  2767.   {$EXTERNALSYM INTERNET_CONNECTION_MODEM}
  2768.   INTERNET_CONNECTION_LAN             = 2;
  2769.   {$EXTERNALSYM INTERNET_CONNECTION_LAN}
  2770.   INTERNET_CONNECTION_PROXY           = 4;
  2771.   {$EXTERNALSYM INTERNET_CONNECTION_PROXY}
  2772.   INTERNET_CONNECTION_MODEM_BUSY      = 8;
  2773.   {$EXTERNALSYM INTERNET_CONNECTION_MODEM_BUSY}
  2774.  
  2775. { Custom dial handler functions }
  2776.  
  2777. { Custom dial handler prototype }
  2778. type
  2779.   PFN_DIAL_HANDLER = function(A:HWND; B:LPCSTR; C:DWORD; D:LPDWORD): DWORD; stdcall;
  2780.   {$EXTERNALSYM PFN_DIAL_HANDLER}
  2781.  
  2782. { Flags for custom dial handler }
  2783. const
  2784.   INTERNET_CUSTOMDIAL_CONNECT         = 0;
  2785.   {$EXTERNALSYM INTERNET_CUSTOMDIAL_CONNECT}
  2786.   INTERNET_CUSTOMDIAL_UNATTENDED      = 1;
  2787.   {$EXTERNALSYM INTERNET_CUSTOMDIAL_UNATTENDED}
  2788.   INTERNET_CUSTOMDIAL_DISCONNECT      = 2;
  2789.   {$EXTERNALSYM INTERNET_CUSTOMDIAL_DISCONNECT}
  2790.   INTERNET_CUSTOMDIAL_SHOWOFFLINE     = 4;
  2791.   {$EXTERNALSYM INTERNET_CUSTOMDIAL_SHOWOFFLINE}
  2792.  
  2793. { Custom dial handler supported functionality flags }
  2794.   INTERNET_CUSTOMDIAL_SAFE_FOR_UNATTENDED = 1;
  2795.   {$EXTERNALSYM INTERNET_CUSTOMDIAL_SAFE_FOR_UNATTENDED}
  2796.   INTERNET_CUSTOMDIAL_WILL_SUPPLY_STATE   = 2;
  2797.   {$EXTERNALSYM INTERNET_CUSTOMDIAL_WILL_SUPPLY_STATE}
  2798.   INTERNET_CUSTOMDIAL_CAN_HANGUP          = 4;
  2799.   {$EXTERNALSYM INTERNET_CUSTOMDIAL_CAN_HANGUP}
  2800.  
  2801. function InternetSetDialState(lpszConnectoid: LPCTSTR; dwState: DWORD;
  2802.   dwReserved: DWORD): BOOL; stdcall;
  2803.   {$EXTERNALSYM InternetSetDialState}
  2804.  
  2805. implementation
  2806.  
  2807. const
  2808.   winetdll = 'wininet.dll';
  2809.  
  2810. function CommitUrlCacheEntry;          external winetdll name 'CommitUrlCacheEntryA';
  2811. function CommitUrlCacheEntryA;          external winetdll name 'CommitUrlCacheEntryA';
  2812. function CommitUrlCacheEntryW;          external winetdll name 'CommitUrlCacheEntryW';
  2813. function CreateUrlCacheEntry;          external winetdll name 'CreateUrlCacheEntryA';
  2814. function CreateUrlCacheEntryA;          external winetdll name 'CreateUrlCacheEntryA';
  2815. function CreateUrlCacheEntryW;          external winetdll name 'CreateUrlCacheEntryW';
  2816. function DeleteUrlCacheEntry;             external winetdll name 'DeleteUrlCacheEntry';
  2817. function FindCloseUrlCache;               external winetdll name 'FindCloseUrlCache';
  2818. function FindFirstUrlCacheEntry;       external winetdll name 'FindFirstUrlCacheEntryA';
  2819. function FindFirstUrlCacheEntryA;       external winetdll name 'FindFirstUrlCacheEntryA';
  2820. function FindFirstUrlCacheEntryW;       external winetdll name 'FindFirstUrlCacheEntryW';
  2821. function FindNextUrlCacheEntry;        external winetdll name 'FindNextUrlCacheEntryA';
  2822. function FindNextUrlCacheEntryA;        external winetdll name 'FindNextUrlCacheEntryA';
  2823. function FindNextUrlCacheEntryW;        external winetdll name 'FindNextUrlCacheEntryW';
  2824. function FtpCommand;                   external winetdll name 'FtpCommandA';
  2825. function FtpCommandA;                   external winetdll name 'FtpCommandA';
  2826. function FtpCommandW;                   external winetdll name 'FtpCommandW';
  2827. function FtpCreateDirectory;           external winetdll name 'FtpCreateDirectoryA';
  2828. function FtpCreateDirectoryA;           external winetdll name 'FtpCreateDirectoryA';
  2829. function FtpCreateDirectoryW;           external winetdll name 'FtpCreateDirectoryW';
  2830. function FtpDeleteFile;                external winetdll name 'FtpDeleteFileA';
  2831. function FtpDeleteFileA;                external winetdll name 'FtpDeleteFileA';
  2832. function FtpDeleteFileW;                external winetdll name 'FtpDeleteFileW';
  2833. function FtpFindFirstFile;             external winetdll name 'FtpFindFirstFileA';
  2834. function FtpFindFirstFileA;             external winetdll name 'FtpFindFirstFileA';
  2835. function FtpFindFirstFileW;             external winetdll name 'FtpFindFirstFileW';
  2836. function FtpGetCurrentDirectory;       external winetdll name 'FtpGetCurrentDirectoryA';
  2837. function FtpGetCurrentDirectoryA;       external winetdll name 'FtpGetCurrentDirectoryA';
  2838. function FtpGetCurrentDirectoryW;       external winetdll name 'FtpGetCurrentDirectoryW';
  2839. function FtpGetFile;                   external winetdll name 'FtpGetFileA';
  2840. function FtpGetFileA;                   external winetdll name 'FtpGetFileA';
  2841. function FtpGetFileW;                   external winetdll name 'FtpGetFileW';
  2842. function FtpOpenFile;                  external winetdll name 'FtpOpenFileA';
  2843. function FtpOpenFileA;                  external winetdll name 'FtpOpenFileA';
  2844. function FtpOpenFileW;                  external winetdll name 'FtpOpenFileW';
  2845. function FtpPutFile;                   external winetdll name 'FtpPutFileA';
  2846. function FtpPutFileA;                   external winetdll name 'FtpPutFileA';
  2847. function FtpPutFileW;                   external winetdll name 'FtpPutFileW';
  2848. function FtpRemoveDirectory;           external winetdll name 'FtpRemoveDirectoryA';
  2849. function FtpRemoveDirectoryA;           external winetdll name 'FtpRemoveDirectoryA';
  2850. function FtpRemoveDirectoryW;           external winetdll name 'FtpRemoveDirectoryW';
  2851. function FtpRenameFile;                external winetdll name 'FtpRenameFileA';
  2852. function FtpRenameFileA;                external winetdll name 'FtpRenameFileA';
  2853. function FtpRenameFileW;                external winetdll name 'FtpRenameFileW';
  2854. function FtpSetCurrentDirectory;       external winetdll name 'FtpSetCurrentDirectoryA';
  2855. function FtpSetCurrentDirectoryA;       external winetdll name 'FtpSetCurrentDirectoryA';
  2856. function FtpSetCurrentDirectoryW;       external winetdll name 'FtpSetCurrentDirectoryW';
  2857. function FtpGetFileSize;                  external winetdll name 'FtpGetFileSize';
  2858. function GetUrlCacheEntryInfo;         external winetdll name 'GetUrlCacheEntryInfoA';
  2859. function GetUrlCacheEntryInfoA;         external winetdll name 'GetUrlCacheEntryInfoA';
  2860. function GetUrlCacheEntryInfoW;         external winetdll name 'GetUrlCacheEntryInfoW';
  2861. function GopherCreateLocator;          external winetdll name 'GopherCreateLocatorA';
  2862. function GopherCreateLocatorA;          external winetdll name 'GopherCreateLocatorA';
  2863. function GopherCreateLocatorW;          external winetdll name 'GopherCreateLocatorW';
  2864. function GopherFindFirstFile;          external winetdll name 'GopherFindFirstFileA';
  2865. function GopherFindFirstFileA;          external winetdll name 'GopherFindFirstFileA';
  2866. function GopherFindFirstFileW;          external winetdll name 'GopherFindFirstFileW';
  2867. function GopherGetAttribute;           external winetdll name 'GopherGetAttributeA';
  2868. function GopherGetAttributeA;           external winetdll name 'GopherGetAttributeA';
  2869. function GopherGetAttributeW;           external winetdll name 'GopherGetAttributeW';
  2870. function GopherGetLocatorType;         external winetdll name 'GopherGetLocatorTypeA';
  2871. function GopherGetLocatorTypeA;         external winetdll name 'GopherGetLocatorTypeA';
  2872. function GopherGetLocatorTypeW;         external winetdll name 'GopherGetLocatorTypeW';
  2873. function GopherOpenFile;               external winetdll name 'GopherOpenFileA';
  2874. function GopherOpenFileA;               external winetdll name 'GopherOpenFileA';
  2875. function GopherOpenFileW;               external winetdll name 'GopherOpenFileW';
  2876. function HttpAddRequestHeaders;        external winetdll name 'HttpAddRequestHeadersA';
  2877. function HttpAddRequestHeadersA;        external winetdll name 'HttpAddRequestHeadersA';
  2878. function HttpAddRequestHeadersW;        external winetdll name 'HttpAddRequestHeadersW';
  2879. function HttpOpenRequest;              external winetdll name 'HttpOpenRequestA';
  2880. function HttpOpenRequestA;              external winetdll name 'HttpOpenRequestA';
  2881. function HttpOpenRequestW;              external winetdll name 'HttpOpenRequestW';
  2882. function HttpQueryInfo;                external winetdll name 'HttpQueryInfoA';
  2883. function HttpQueryInfoA;                external winetdll name 'HttpQueryInfoA';
  2884. function HttpQueryInfoW;                external winetdll name 'HttpQueryInfoW';
  2885. function HttpSendRequest;              external winetdll name 'HttpSendRequestA';
  2886. function HttpSendRequestA;              external winetdll name 'HttpSendRequestA';
  2887. function HttpSendRequestW;              external winetdll name 'HttpSendRequestW';
  2888. function InternetCanonicalizeUrl;      external winetdll name 'InternetCanonicalizeUrlA';
  2889. function InternetCanonicalizeUrlA;      external winetdll name 'InternetCanonicalizeUrlA';
  2890. function InternetCanonicalizeUrlW;      external winetdll name 'InternetCanonicalizeUrlW';
  2891. function InternetCloseHandle;             external winetdll name 'InternetCloseHandle';
  2892. function InternetCombineUrl;           external winetdll name 'InternetCombineUrlA';
  2893. function InternetCombineUrlA;           external winetdll name 'InternetCombineUrlA';
  2894. function InternetCombineUrlW;           external winetdll name 'InternetCombineUrlW';
  2895. function InternetConfirmZoneCrossing;     external winetdll name 'InternetConfirmZoneCrossing';
  2896. function InternetConnect;              external winetdll name 'InternetConnectA';
  2897. function InternetConnectA;              external winetdll name 'InternetConnectA';
  2898. function InternetConnectW;              external winetdll name 'InternetConnectW';
  2899. function InternetCrackUrl;             external winetdll name 'InternetCrackUrlA';
  2900. function InternetCrackUrlA;             external winetdll name 'InternetCrackUrlA';
  2901. function InternetCrackUrlW;             external winetdll name 'InternetCrackUrlW';
  2902. function InternetCreateUrl;            external winetdll name 'InternetCreateUrlA';
  2903. function InternetCreateUrlA;            external winetdll name 'InternetCreateUrlA';
  2904. function InternetCreateUrlW;            external winetdll name 'InternetCreateUrlW';
  2905. function InternetErrorDlg;                external winetdll name 'InternetErrorDlg';
  2906. function InternetFindNextFile;         external winetdll name 'InternetFindNextFileA';
  2907. function InternetFindNextFileA;         external winetdll name 'InternetFindNextFileA';
  2908. function InternetFindNextFileW;         external winetdll name 'InternetFindNextFileW';
  2909. function InternetGetCookie;            external winetdll name 'InternetGetCookieA';
  2910. function InternetGetCookieA;            external winetdll name 'InternetGetCookieA';
  2911. function InternetGetCookieW;            external winetdll name 'InternetGetCookieW';
  2912. function InternetGetLastResponseInfo;  external winetdll name 'InternetGetLastResponseInfoA';
  2913. function InternetGetLastResponseInfoA;  external winetdll name 'InternetGetLastResponseInfoA';
  2914. function InternetGetLastResponseInfoW;  external winetdll name 'InternetGetLastResponseInfoW';
  2915. function InternetOpen;                 external winetdll name 'InternetOpenA';
  2916. function InternetOpenA;                 external winetdll name 'InternetOpenA';
  2917. function InternetOpenW;                 external winetdll name 'InternetOpenW';
  2918. function InternetOpenUrl;              external winetdll name 'InternetOpenUrlA';
  2919. function InternetOpenUrlA;              external winetdll name 'InternetOpenUrlA';
  2920. function InternetOpenUrlW;              external winetdll name 'InternetOpenUrlW';
  2921. function InternetQueryDataAvailable;      external winetdll name 'InternetQueryDataAvailable';
  2922. function InternetQueryOption;          external winetdll name 'InternetQueryOptionA';
  2923. function InternetQueryOptionA;          external winetdll name 'InternetQueryOptionA';
  2924. function InternetQueryOptionW;          external winetdll name 'InternetQueryOptionW';
  2925. function InternetReadFile;                external winetdll name 'InternetReadFile';
  2926. function InternetSetCookie;            external winetdll name 'InternetSetCookieA';
  2927. function InternetSetCookieA;            external winetdll name 'InternetSetCookieA';
  2928. function InternetSetCookieW;            external winetdll name 'InternetSetCookieW';
  2929. function InternetSetFilePointer;          external winetdll name 'InternetSetFilePointer';
  2930. function InternetSetOption;            external winetdll name 'InternetSetOptionA';
  2931. function InternetSetOptionA;            external winetdll name 'InternetSetOptionA';
  2932. function InternetSetOptionW;            external winetdll name 'InternetSetOptionW';
  2933. function InternetSetOptionEx;          external winetdll name 'InternetSetOptionExA';
  2934. function InternetSetOptionExA;          external winetdll name 'InternetSetOptionExA';
  2935. function InternetSetOptionExW;          external winetdll name 'InternetSetOptionExW';
  2936. function InternetSetStatusCallback;       external winetdll name 'InternetSetStatusCallback';
  2937. function InternetTimeFromSystemTime;      external winetdll name 'InternetTimeFromSystemTime';
  2938. function InternetWriteFile;               external winetdll name 'InternetWriteFile';
  2939. function ReadUrlCacheEntryStream;         external winetdll name 'ReadUrlCacheEntryStream';
  2940. function RetrieveUrlCacheEntryFile;    external winetdll name 'RetrieveUrlCacheEntryFileA';
  2941. function RetrieveUrlCacheEntryFileA;    external winetdll name 'RetrieveUrlCacheEntryFileA';
  2942. function RetrieveUrlCacheEntryFileW;    external winetdll name 'RetrieveUrlCacheEntryFileW';
  2943. function RetrieveUrlCacheEntryStream;  external winetdll name 'RetrieveUrlCacheEntryStreamA';
  2944. function RetrieveUrlCacheEntryStreamA;  external winetdll name 'RetrieveUrlCacheEntryStreamA';
  2945. function RetrieveUrlCacheEntryStreamW;  external winetdll name 'RetrieveUrlCacheEntryStreamW';
  2946. function SetUrlCacheEntryInfo;         external winetdll name 'SetUrlCacheEntryInfoA';
  2947. function SetUrlCacheEntryInfoA;         external winetdll name 'SetUrlCacheEntryInfoA';
  2948. function SetUrlCacheEntryInfoW;         external winetdll name 'SetUrlCacheEntryInfoW';
  2949. function UnlockUrlCacheEntryFile;         external winetdll name 'UnlockUrlCacheEntryFile';
  2950. function UnlockUrlCacheEntryStream;       external winetdll name 'UnlockUrlCacheEntryStream';
  2951.  
  2952. function CreateUrlCacheGroup;             external winetdll name 'CreateUrlCacheGroup';
  2953. function DeleteUrlCacheGroup;             external winetdll name 'DeleteUrlCacheGroup';
  2954. function FindFirstUrlCacheEntryEx;     external winetdll name 'FindFirstUrlCacheEntryExA';
  2955. function FindFirstUrlCacheEntryExA;     external winetdll name 'FindFirstUrlCacheEntryExA';
  2956. function FindFirstUrlCacheEntryExW;     external winetdll name 'FindFirstUrlCacheEntryExW';
  2957. function FindNextUrlCacheEntryEx;      external winetdll name 'FindNextUrlCacheEntryExA';
  2958. function FindNextUrlCacheEntryExA;      external winetdll name 'FindNextUrlCacheEntryExA';
  2959. function FindNextUrlCacheEntryExW;      external winetdll name 'FindNextUrlCacheEntryExW';
  2960. function GetUrlCacheEntryInfoEx;       external winetdll name 'GetUrlCacheEntryInfoExA';
  2961. function GetUrlCacheEntryInfoExA;       external winetdll name 'GetUrlCacheEntryInfoExA';
  2962. function GetUrlCacheEntryInfoExW;       external winetdll name 'GetUrlCacheEntryInfoExW';
  2963. function HttpEndRequest;               external winetdll name 'HttpEndRequestA';
  2964. function HttpEndRequestA;               external winetdll name 'HttpEndRequestA';
  2965. function HttpEndRequestW;               external winetdll name 'HttpEndRequestW';
  2966. function InternetAttemptConnect;          external winetdll name 'InternetAttemptConnect';
  2967. function InternetAuthNotifyCallback;      external winetdll name 'InternetAuthNotifyCallback';
  2968. function InternetAutodial;                external winetdll name 'InternetAutodial';
  2969. function InternetAutodialHangup;          external winetdll name 'InternetAutodialHangup';
  2970. function InternetCheckConnection;      external winetdll name 'InternetCheckConnectionA';
  2971. function InternetCheckConnectionA;      external winetdll name 'InternetCheckConnectionA';
  2972. function InternetCheckConnectionW;      external winetdll name 'InternetCheckConnectionW';
  2973. function InternetDial;                    external winetdll name 'InternetDial';
  2974. function InternetGetConnectedState;       external winetdll name 'InternetGetConnectedState';
  2975. function InternetGoOnline;                external winetdll name 'InternetGoOnline';
  2976. function InternetHangUp;                  external winetdll name 'InternetHangUp';
  2977. function InternetLockRequestFile;         external winetdll name 'InternetLockRequestFile';
  2978. function InternetReadFileEx;           external winetdll name 'InternetReadFileExA';
  2979. function InternetReadFileExA;           external winetdll name 'InternetReadFileExA';
  2980. function InternetReadFileExW;           external winetdll name 'InternetReadFileExW';
  2981. function InternetSetDialState;            external winetdll name 'InternetSetDialState';
  2982. function InternetUnlockRequestFile;       external winetdll name 'InternetUnlockRequestFile';
  2983. function SetUrlCacheEntryGroup;           external winetdll name 'SetUrlCacheEntryGroup';
  2984. function HttpSendRequestEx;            external winetdll name 'HttpSendRequestExA';
  2985. function HttpSendRequestExA;            external winetdll name 'HttpSendRequestExA';
  2986. function HttpSendRequestExW;            external winetdll name 'HttpSendRequestExW';
  2987.  
  2988.  
  2989.  
  2990. function IS_GOPHER_FILE(GopherType: DWORD): BOOL;
  2991. begin
  2992.   Result := GopherType and GOPHER_TYPE_FILE_MASK = 0;
  2993. end;
  2994.  
  2995. function IS_GOPHER_DIRECTORY(GopherType: DWORD): BOOL;
  2996. begin
  2997.   Result := GopherType and GOPHER_TYPE_DIRECTORY = 0;
  2998. end;
  2999.  
  3000. function IS_GOPHER_PHONE_SERVER(GopherType: DWORD): BOOL;
  3001. begin
  3002.   Result := GopherType and GOPHER_TYPE_CSO = 0;
  3003. end;
  3004.  
  3005. function IS_GOPHER_ERROR(GopherType: DWORD): BOOL;
  3006. begin
  3007.   Result := GopherType and GOPHER_TYPE_ERROR = 0;
  3008. end;
  3009.  
  3010. function IS_GOPHER_INDEX_SERVER(GopherType: DWORD): BOOL;
  3011. begin
  3012.   Result := GopherType and GOPHER_TYPE_INDEX_SERVER = 0;
  3013. end;
  3014.  
  3015. function IS_GOPHER_TELNET_SESSION(GopherType: DWORD): BOOL;
  3016. begin
  3017.   Result := GopherType and GOPHER_TYPE_TELNET = 0;
  3018. end;
  3019.  
  3020. function IS_GOPHER_BACKUP_SERVER(GopherType: DWORD): BOOL;
  3021. begin
  3022.   Result := GopherType and GOPHER_TYPE_REDUNDANT = 0;
  3023. end;
  3024.  
  3025. function IS_GOPHER_TN3270_SESSION(GopherType: DWORD): BOOL;
  3026. begin
  3027.   Result := GopherType and GOPHER_TYPE_TN3270 = 0;
  3028. end;
  3029.  
  3030. function IS_GOPHER_ASK(GopherType: DWORD): BOOL;
  3031. begin
  3032.   Result := GopherType and GOPHER_TYPE_ASK = 0;
  3033. end;
  3034.  
  3035. function IS_GOPHER_PLUS(GopherType: DWORD): BOOL;
  3036. begin
  3037.   Result := GopherType and GOPHER_TYPE_GOPHER_PLUS = 0;
  3038. end;
  3039.  
  3040. function IS_GOPHER_TYPE_KNOWN(GopherType: DWORD): BOOL;
  3041. begin
  3042.   Result := GopherType and GOPHER_TYPE_UNKNOWN = 0;
  3043. end;
  3044.  
  3045. end.
  3046.